From af0d0dd816ac5321cc74b7c6221f8f39f98c7e6e Mon Sep 17 00:00:00 2001
From: Jeff Ching <chingor@google.com>
Date: Tue, 6 Aug 2019 14:11:28 -0700
Subject: [PATCH 1/3] Add asset v1p2beta1 client

---
 .../asset/v1p2beta1/AssetServiceGrpc.java     | 1119 ++++++++++
 .../google/cloud/asset/v1p2beta1/Asset.java   | 1710 +++++++++++++++
 .../cloud/asset/v1p2beta1/AssetOrBuilder.java |  195 ++
 .../cloud/asset/v1p2beta1/AssetProto.java     |  132 ++
 .../asset/v1p2beta1/AssetServiceProto.java    |  343 +++
 .../BatchGetAssetsHistoryRequest.java         | 1426 +++++++++++++
 ...BatchGetAssetsHistoryRequestOrBuilder.java |  175 ++
 .../BatchGetAssetsHistoryResponse.java        |  931 ++++++++
 ...atchGetAssetsHistoryResponseOrBuilder.java |   62 +
 .../asset/v1p2beta1/BigQueryDestination.java  |  885 ++++++++
 .../BigQueryDestinationOrBuilder.java         |   76 +
 .../cloud/asset/v1p2beta1/ContentType.java    |  199 ++
 .../asset/v1p2beta1/CreateFeedRequest.java    | 1102 ++++++++++
 .../v1p2beta1/CreateFeedRequestOrBuilder.java |  105 +
 .../asset/v1p2beta1/DeleteFeedRequest.java    |  619 ++++++
 .../v1p2beta1/DeleteFeedRequestOrBuilder.java |   37 +
 .../asset/v1p2beta1/ExportAssetsRequest.java  | 1633 ++++++++++++++
 .../ExportAssetsRequestOrBuilder.java         |  192 ++
 .../asset/v1p2beta1/ExportAssetsResponse.java |  977 +++++++++
 .../ExportAssetsResponseOrBuilder.java        |   75 +
 .../google/cloud/asset/v1p2beta1/Feed.java    | 1713 +++++++++++++++
 .../cloud/asset/v1p2beta1/FeedName.java       |  180 ++
 .../cloud/asset/v1p2beta1/FeedOrBuilder.java  |  232 ++
 .../asset/v1p2beta1/FeedOutputConfig.java     |  802 +++++++
 .../v1p2beta1/FeedOutputConfigOrBuilder.java  |   43 +
 .../cloud/asset/v1p2beta1/GcsDestination.java |  965 +++++++++
 .../v1p2beta1/GcsDestinationOrBuilder.java    |   78 +
 .../cloud/asset/v1p2beta1/GetFeedRequest.java |  618 ++++++
 .../v1p2beta1/GetFeedRequestOrBuilder.java    |   37 +
 .../asset/v1p2beta1/ListFeedsRequest.java     |  612 ++++++
 .../v1p2beta1/ListFeedsRequestOrBuilder.java  |   35 +
 .../asset/v1p2beta1/ListFeedsResponse.java    |  922 ++++++++
 .../v1p2beta1/ListFeedsResponseOrBuilder.java |   61 +
 .../cloud/asset/v1p2beta1/OutputConfig.java   | 1133 ++++++++++
 .../v1p2beta1/OutputConfigOrBuilder.java      |   83 +
 .../asset/v1p2beta1/PubsubDestination.java    |  605 ++++++
 .../v1p2beta1/PubsubDestinationOrBuilder.java |   33 +
 .../cloud/asset/v1p2beta1/Resource.java       | 1901 +++++++++++++++++
 .../asset/v1p2beta1/ResourceOrBuilder.java    |  219 ++
 .../cloud/asset/v1p2beta1/TemporalAsset.java  | 1045 +++++++++
 .../v1p2beta1/TemporalAssetOrBuilder.java     |   83 +
 .../cloud/asset/v1p2beta1/TimeWindow.java     |  960 +++++++++
 .../asset/v1p2beta1/TimeWindowOrBuilder.java  |   75 +
 .../asset/v1p2beta1/UpdateFeedRequest.java    | 1029 +++++++++
 .../v1p2beta1/UpdateFeedRequestOrBuilder.java |   90 +
 .../cloud/asset/v1p2beta1/asset_service.proto |  384 ++++
 .../google/cloud/asset/v1p2beta1/assets.proto |  135 ++
 .../asset/v1p2beta1/AssetServiceClient.java   |  763 +++++++
 .../asset/v1p2beta1/AssetServiceSettings.java |  257 +++
 .../cloud/asset/v1p2beta1/package-info.java   |   40 +
 .../v1p2beta1/stub/AssetServiceStub.java      |   90 +
 .../stub/AssetServiceStubSettings.java        |  475 ++++
 .../stub/GrpcAssetServiceCallableFactory.java |  115 +
 .../v1p2beta1/stub/GrpcAssetServiceStub.java  |  364 ++++
 .../v1p2beta1/AssetServiceClientTest.java     |  307 +++
 .../asset/v1p2beta1/MockAssetService.java     |   57 +
 .../asset/v1p2beta1/MockAssetServiceImpl.java |  162 ++
 .../google-cloud-asset/synth.metadata         |   20 +-
 .../google-cloud-asset/synth.py               |    2 +-
 59 files changed, 28712 insertions(+), 6 deletions(-)
 create mode 100644 google-api-grpc/grpc-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceGrpc.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Asset.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetProto.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceProto.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponse.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponseOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestination.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestinationOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ContentType.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponse.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponseOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Feed.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedName.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfig.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfigOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestination.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestinationOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponse.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponseOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfig.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfigOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestination.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestinationOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Resource.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ResourceOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAsset.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAssetOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindow.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindowOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequest.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequestOrBuilder.java
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/asset_service.proto
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/assets.proto
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceClient.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceSettings.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/package-info.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStub.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStubSettings.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceCallableFactory.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceStub.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/AssetServiceClientTest.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetService.java
 create mode 100644 google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetServiceImpl.java

diff --git a/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceGrpc.java b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceGrpc.java
new file mode 100644
index 000000000000..e98d8f838653
--- /dev/null
+++ b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceGrpc.java
@@ -0,0 +1,1119 @@
+package com.google.cloud.asset.v1p2beta1;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+import static io.grpc.stub.ClientCalls.asyncUnaryCall;
+import static io.grpc.stub.ClientCalls.blockingUnaryCall;
+import static io.grpc.stub.ClientCalls.futureUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
+
+/**
+ *
+ *
+ * <pre>
+ * Asset service definition.
+ * </pre>
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.10.0)",
+    comments = "Source: google/cloud/asset/v1p2beta1/asset_service.proto")
+public final class AssetServiceGrpc {
+
+  private AssetServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "google.cloud.asset.v1p2beta1.AssetService";
+
+  // Static method descriptors that strictly reflect the proto.
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getExportAssetsMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ExportAssetsRequest, com.google.longrunning.Operation>
+      METHOD_EXPORT_ASSETS = getExportAssetsMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ExportAssetsRequest, com.google.longrunning.Operation>
+      getExportAssetsMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ExportAssetsRequest, com.google.longrunning.Operation>
+      getExportAssetsMethod() {
+    return getExportAssetsMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ExportAssetsRequest, com.google.longrunning.Operation>
+      getExportAssetsMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.ExportAssetsRequest, com.google.longrunning.Operation>
+        getExportAssetsMethod;
+    if ((getExportAssetsMethod = AssetServiceGrpc.getExportAssetsMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getExportAssetsMethod = AssetServiceGrpc.getExportAssetsMethod) == null) {
+          AssetServiceGrpc.getExportAssetsMethod =
+              getExportAssetsMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.ExportAssetsRequest,
+                          com.google.longrunning.Operation>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "ExportAssets"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.ExportAssetsRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.longrunning.Operation.getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("ExportAssets"))
+                      .build();
+        }
+      }
+    }
+    return getExportAssetsMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getBatchGetAssetsHistoryMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+      METHOD_BATCH_GET_ASSETS_HISTORY = getBatchGetAssetsHistoryMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+      getBatchGetAssetsHistoryMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+      getBatchGetAssetsHistoryMethod() {
+    return getBatchGetAssetsHistoryMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+      getBatchGetAssetsHistoryMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+        getBatchGetAssetsHistoryMethod;
+    if ((getBatchGetAssetsHistoryMethod = AssetServiceGrpc.getBatchGetAssetsHistoryMethod)
+        == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getBatchGetAssetsHistoryMethod = AssetServiceGrpc.getBatchGetAssetsHistoryMethod)
+            == null) {
+          AssetServiceGrpc.getBatchGetAssetsHistoryMethod =
+              getBatchGetAssetsHistoryMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+                          com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "BatchGetAssetsHistory"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse
+                                  .getDefaultInstance()))
+                      .setSchemaDescriptor(
+                          new AssetServiceMethodDescriptorSupplier("BatchGetAssetsHistory"))
+                      .build();
+        }
+      }
+    }
+    return getBatchGetAssetsHistoryMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getCreateFeedMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.CreateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      METHOD_CREATE_FEED = getCreateFeedMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.CreateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getCreateFeedMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.CreateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getCreateFeedMethod() {
+    return getCreateFeedMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.CreateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getCreateFeedMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.CreateFeedRequest,
+            com.google.cloud.asset.v1p2beta1.Feed>
+        getCreateFeedMethod;
+    if ((getCreateFeedMethod = AssetServiceGrpc.getCreateFeedMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getCreateFeedMethod = AssetServiceGrpc.getCreateFeedMethod) == null) {
+          AssetServiceGrpc.getCreateFeedMethod =
+              getCreateFeedMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.CreateFeedRequest,
+                          com.google.cloud.asset.v1p2beta1.Feed>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "CreateFeed"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.CreateFeedRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("CreateFeed"))
+                      .build();
+        }
+      }
+    }
+    return getCreateFeedMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getGetFeedMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.GetFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      METHOD_GET_FEED = getGetFeedMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.GetFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getGetFeedMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.GetFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getGetFeedMethod() {
+    return getGetFeedMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.GetFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getGetFeedMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.GetFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+        getGetFeedMethod;
+    if ((getGetFeedMethod = AssetServiceGrpc.getGetFeedMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getGetFeedMethod = AssetServiceGrpc.getGetFeedMethod) == null) {
+          AssetServiceGrpc.getGetFeedMethod =
+              getGetFeedMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.GetFeedRequest,
+                          com.google.cloud.asset.v1p2beta1.Feed>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "GetFeed"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.GetFeedRequest.getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("GetFeed"))
+                      .build();
+        }
+      }
+    }
+    return getGetFeedMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getListFeedsMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+          com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+      METHOD_LIST_FEEDS = getListFeedsMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+          com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+      getListFeedsMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+          com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+      getListFeedsMethod() {
+    return getListFeedsMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+          com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+      getListFeedsMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+            com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+        getListFeedsMethod;
+    if ((getListFeedsMethod = AssetServiceGrpc.getListFeedsMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getListFeedsMethod = AssetServiceGrpc.getListFeedsMethod) == null) {
+          AssetServiceGrpc.getListFeedsMethod =
+              getListFeedsMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+                          com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "ListFeeds"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.ListFeedsRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.ListFeedsResponse
+                                  .getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("ListFeeds"))
+                      .build();
+        }
+      }
+    }
+    return getListFeedsMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getUpdateFeedMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.UpdateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      METHOD_UPDATE_FEED = getUpdateFeedMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.UpdateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getUpdateFeedMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.UpdateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getUpdateFeedMethod() {
+    return getUpdateFeedMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.UpdateFeedRequest, com.google.cloud.asset.v1p2beta1.Feed>
+      getUpdateFeedMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.UpdateFeedRequest,
+            com.google.cloud.asset.v1p2beta1.Feed>
+        getUpdateFeedMethod;
+    if ((getUpdateFeedMethod = AssetServiceGrpc.getUpdateFeedMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getUpdateFeedMethod = AssetServiceGrpc.getUpdateFeedMethod) == null) {
+          AssetServiceGrpc.getUpdateFeedMethod =
+              getUpdateFeedMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.UpdateFeedRequest,
+                          com.google.cloud.asset.v1p2beta1.Feed>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "UpdateFeed"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.UpdateFeedRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("UpdateFeed"))
+                      .build();
+        }
+      }
+    }
+    return getUpdateFeedMethod;
+  }
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  @java.lang.Deprecated // Use {@link #getDeleteFeedMethod()} instead.
+  public static final io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.DeleteFeedRequest, com.google.protobuf.Empty>
+      METHOD_DELETE_FEED = getDeleteFeedMethodHelper();
+
+  private static volatile io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.DeleteFeedRequest, com.google.protobuf.Empty>
+      getDeleteFeedMethod;
+
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.DeleteFeedRequest, com.google.protobuf.Empty>
+      getDeleteFeedMethod() {
+    return getDeleteFeedMethodHelper();
+  }
+
+  private static io.grpc.MethodDescriptor<
+          com.google.cloud.asset.v1p2beta1.DeleteFeedRequest, com.google.protobuf.Empty>
+      getDeleteFeedMethodHelper() {
+    io.grpc.MethodDescriptor<
+            com.google.cloud.asset.v1p2beta1.DeleteFeedRequest, com.google.protobuf.Empty>
+        getDeleteFeedMethod;
+    if ((getDeleteFeedMethod = AssetServiceGrpc.getDeleteFeedMethod) == null) {
+      synchronized (AssetServiceGrpc.class) {
+        if ((getDeleteFeedMethod = AssetServiceGrpc.getDeleteFeedMethod) == null) {
+          AssetServiceGrpc.getDeleteFeedMethod =
+              getDeleteFeedMethod =
+                  io.grpc.MethodDescriptor
+                      .<com.google.cloud.asset.v1p2beta1.DeleteFeedRequest,
+                          com.google.protobuf.Empty>
+                          newBuilder()
+                      .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+                      .setFullMethodName(
+                          generateFullMethodName(
+                              "google.cloud.asset.v1p2beta1.AssetService", "DeleteFeed"))
+                      .setSampledToLocalTracing(true)
+                      .setRequestMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.cloud.asset.v1p2beta1.DeleteFeedRequest
+                                  .getDefaultInstance()))
+                      .setResponseMarshaller(
+                          io.grpc.protobuf.ProtoUtils.marshaller(
+                              com.google.protobuf.Empty.getDefaultInstance()))
+                      .setSchemaDescriptor(new AssetServiceMethodDescriptorSupplier("DeleteFeed"))
+                      .build();
+        }
+      }
+    }
+    return getDeleteFeedMethod;
+  }
+
+  /** Creates a new async stub that supports all call types for the service */
+  public static AssetServiceStub newStub(io.grpc.Channel channel) {
+    return new AssetServiceStub(channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static AssetServiceBlockingStub newBlockingStub(io.grpc.Channel channel) {
+    return new AssetServiceBlockingStub(channel);
+  }
+
+  /** Creates a new ListenableFuture-style stub that supports unary calls on the service */
+  public static AssetServiceFutureStub newFutureStub(io.grpc.Channel channel) {
+    return new AssetServiceFutureStub(channel);
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset service definition.
+   * </pre>
+   */
+  public abstract static class AssetServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     *
+     *
+     * <pre>
+     * Exports assets with time and resource types to a given Cloud Storage
+     * location. The output format is newline-delimited JSON.
+     * This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
+     * to keep track of the export.
+     * </pre>
+     */
+    public void exportAssets(
+        com.google.cloud.asset.v1p2beta1.ExportAssetsRequest request,
+        io.grpc.stub.StreamObserver<com.google.longrunning.Operation> responseObserver) {
+      asyncUnimplementedUnaryCall(getExportAssetsMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Batch gets the update history of assets that overlap a time window.
+     * For RESOURCE content, this API outputs history with asset in both
+     * non-delete or deleted status.
+     * For IAM_POLICY content, this API outputs history when the asset and its
+     * attached IAM POLICY both exist. This can create gaps in the output history.
+     * </pre>
+     */
+    public void batchGetAssetsHistory(
+        com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+            responseObserver) {
+      asyncUnimplementedUnaryCall(getBatchGetAssetsHistoryMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Creates a feed in a parent project/folder/organization to listen to its
+     * asset updates.
+     * </pre>
+     */
+    public void createFeed(
+        com.google.cloud.asset.v1p2beta1.CreateFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnimplementedUnaryCall(getCreateFeedMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Gets details about an asset feed.
+     * </pre>
+     */
+    public void getFeed(
+        com.google.cloud.asset.v1p2beta1.GetFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnimplementedUnaryCall(getGetFeedMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Lists all asset feeds in a parent project/folder/organization.
+     * </pre>
+     */
+    public void listFeeds(
+        com.google.cloud.asset.v1p2beta1.ListFeedsRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+            responseObserver) {
+      asyncUnimplementedUnaryCall(getListFeedsMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Updates an asset feed configuration.
+     * </pre>
+     */
+    public void updateFeed(
+        com.google.cloud.asset.v1p2beta1.UpdateFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnimplementedUnaryCall(getUpdateFeedMethodHelper(), responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Deletes an asset feed.
+     * </pre>
+     */
+    public void deleteFeed(
+        com.google.cloud.asset.v1p2beta1.DeleteFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.protobuf.Empty> responseObserver) {
+      asyncUnimplementedUnaryCall(getDeleteFeedMethodHelper(), responseObserver);
+    }
+
+    @java.lang.Override
+    public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+              getExportAssetsMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.ExportAssetsRequest,
+                      com.google.longrunning.Operation>(this, METHODID_EXPORT_ASSETS)))
+          .addMethod(
+              getBatchGetAssetsHistoryMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest,
+                      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>(
+                      this, METHODID_BATCH_GET_ASSETS_HISTORY)))
+          .addMethod(
+              getCreateFeedMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.CreateFeedRequest,
+                      com.google.cloud.asset.v1p2beta1.Feed>(this, METHODID_CREATE_FEED)))
+          .addMethod(
+              getGetFeedMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.GetFeedRequest,
+                      com.google.cloud.asset.v1p2beta1.Feed>(this, METHODID_GET_FEED)))
+          .addMethod(
+              getListFeedsMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.ListFeedsRequest,
+                      com.google.cloud.asset.v1p2beta1.ListFeedsResponse>(
+                      this, METHODID_LIST_FEEDS)))
+          .addMethod(
+              getUpdateFeedMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.UpdateFeedRequest,
+                      com.google.cloud.asset.v1p2beta1.Feed>(this, METHODID_UPDATE_FEED)))
+          .addMethod(
+              getDeleteFeedMethodHelper(),
+              asyncUnaryCall(
+                  new MethodHandlers<
+                      com.google.cloud.asset.v1p2beta1.DeleteFeedRequest,
+                      com.google.protobuf.Empty>(this, METHODID_DELETE_FEED)))
+          .build();
+    }
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset service definition.
+   * </pre>
+   */
+  public static final class AssetServiceStub extends io.grpc.stub.AbstractStub<AssetServiceStub> {
+    private AssetServiceStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private AssetServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AssetServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AssetServiceStub(channel, callOptions);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Exports assets with time and resource types to a given Cloud Storage
+     * location. The output format is newline-delimited JSON.
+     * This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
+     * to keep track of the export.
+     * </pre>
+     */
+    public void exportAssets(
+        com.google.cloud.asset.v1p2beta1.ExportAssetsRequest request,
+        io.grpc.stub.StreamObserver<com.google.longrunning.Operation> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getExportAssetsMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Batch gets the update history of assets that overlap a time window.
+     * For RESOURCE content, this API outputs history with asset in both
+     * non-delete or deleted status.
+     * For IAM_POLICY content, this API outputs history when the asset and its
+     * attached IAM POLICY both exist. This can create gaps in the output history.
+     * </pre>
+     */
+    public void batchGetAssetsHistory(
+        com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+            responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getBatchGetAssetsHistoryMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Creates a feed in a parent project/folder/organization to listen to its
+     * asset updates.
+     * </pre>
+     */
+    public void createFeed(
+        com.google.cloud.asset.v1p2beta1.CreateFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getCreateFeedMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Gets details about an asset feed.
+     * </pre>
+     */
+    public void getFeed(
+        com.google.cloud.asset.v1p2beta1.GetFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getGetFeedMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Lists all asset feeds in a parent project/folder/organization.
+     * </pre>
+     */
+    public void listFeeds(
+        com.google.cloud.asset.v1p2beta1.ListFeedsRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+            responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getListFeedsMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Updates an asset feed configuration.
+     * </pre>
+     */
+    public void updateFeed(
+        com.google.cloud.asset.v1p2beta1.UpdateFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getUpdateFeedMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Deletes an asset feed.
+     * </pre>
+     */
+    public void deleteFeed(
+        com.google.cloud.asset.v1p2beta1.DeleteFeedRequest request,
+        io.grpc.stub.StreamObserver<com.google.protobuf.Empty> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getDeleteFeedMethodHelper(), getCallOptions()),
+          request,
+          responseObserver);
+    }
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset service definition.
+   * </pre>
+   */
+  public static final class AssetServiceBlockingStub
+      extends io.grpc.stub.AbstractStub<AssetServiceBlockingStub> {
+    private AssetServiceBlockingStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private AssetServiceBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AssetServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AssetServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Exports assets with time and resource types to a given Cloud Storage
+     * location. The output format is newline-delimited JSON.
+     * This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
+     * to keep track of the export.
+     * </pre>
+     */
+    public com.google.longrunning.Operation exportAssets(
+        com.google.cloud.asset.v1p2beta1.ExportAssetsRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getExportAssetsMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Batch gets the update history of assets that overlap a time window.
+     * For RESOURCE content, this API outputs history with asset in both
+     * non-delete or deleted status.
+     * For IAM_POLICY content, this API outputs history when the asset and its
+     * attached IAM POLICY both exist. This can create gaps in the output history.
+     * </pre>
+     */
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse batchGetAssetsHistory(
+        com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getBatchGetAssetsHistoryMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Creates a feed in a parent project/folder/organization to listen to its
+     * asset updates.
+     * </pre>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed createFeed(
+        com.google.cloud.asset.v1p2beta1.CreateFeedRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getCreateFeedMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Gets details about an asset feed.
+     * </pre>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed getFeed(
+        com.google.cloud.asset.v1p2beta1.GetFeedRequest request) {
+      return blockingUnaryCall(getChannel(), getGetFeedMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Lists all asset feeds in a parent project/folder/organization.
+     * </pre>
+     */
+    public com.google.cloud.asset.v1p2beta1.ListFeedsResponse listFeeds(
+        com.google.cloud.asset.v1p2beta1.ListFeedsRequest request) {
+      return blockingUnaryCall(getChannel(), getListFeedsMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Updates an asset feed configuration.
+     * </pre>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed updateFeed(
+        com.google.cloud.asset.v1p2beta1.UpdateFeedRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getUpdateFeedMethodHelper(), getCallOptions(), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Deletes an asset feed.
+     * </pre>
+     */
+    public com.google.protobuf.Empty deleteFeed(
+        com.google.cloud.asset.v1p2beta1.DeleteFeedRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getDeleteFeedMethodHelper(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset service definition.
+   * </pre>
+   */
+  public static final class AssetServiceFutureStub
+      extends io.grpc.stub.AbstractStub<AssetServiceFutureStub> {
+    private AssetServiceFutureStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private AssetServiceFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AssetServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AssetServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Exports assets with time and resource types to a given Cloud Storage
+     * location. The output format is newline-delimited JSON.
+     * This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
+     * to keep track of the export.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.longrunning.Operation>
+        exportAssets(com.google.cloud.asset.v1p2beta1.ExportAssetsRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getExportAssetsMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Batch gets the update history of assets that overlap a time window.
+     * For RESOURCE content, this API outputs history with asset in both
+     * non-delete or deleted status.
+     * For IAM_POLICY content, this API outputs history when the asset and its
+     * attached IAM POLICY both exist. This can create gaps in the output history.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>
+        batchGetAssetsHistory(
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getBatchGetAssetsHistoryMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Creates a feed in a parent project/folder/organization to listen to its
+     * asset updates.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.cloud.asset.v1p2beta1.Feed>
+        createFeed(com.google.cloud.asset.v1p2beta1.CreateFeedRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getCreateFeedMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Gets details about an asset feed.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.cloud.asset.v1p2beta1.Feed>
+        getFeed(com.google.cloud.asset.v1p2beta1.GetFeedRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getGetFeedMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Lists all asset feeds in a parent project/folder/organization.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<
+            com.google.cloud.asset.v1p2beta1.ListFeedsResponse>
+        listFeeds(com.google.cloud.asset.v1p2beta1.ListFeedsRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getListFeedsMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Updates an asset feed configuration.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.cloud.asset.v1p2beta1.Feed>
+        updateFeed(com.google.cloud.asset.v1p2beta1.UpdateFeedRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getUpdateFeedMethodHelper(), getCallOptions()), request);
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * Deletes an asset feed.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.protobuf.Empty> deleteFeed(
+        com.google.cloud.asset.v1p2beta1.DeleteFeedRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getDeleteFeedMethodHelper(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_EXPORT_ASSETS = 0;
+  private static final int METHODID_BATCH_GET_ASSETS_HISTORY = 1;
+  private static final int METHODID_CREATE_FEED = 2;
+  private static final int METHODID_GET_FEED = 3;
+  private static final int METHODID_LIST_FEEDS = 4;
+  private static final int METHODID_UPDATE_FEED = 5;
+  private static final int METHODID_DELETE_FEED = 6;
+
+  private static final class MethodHandlers<Req, Resp>
+      implements io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+          io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+          io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+          io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final AssetServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(AssetServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_EXPORT_ASSETS:
+          serviceImpl.exportAssets(
+              (com.google.cloud.asset.v1p2beta1.ExportAssetsRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.longrunning.Operation>) responseObserver);
+          break;
+        case METHODID_BATCH_GET_ASSETS_HISTORY:
+          serviceImpl.batchGetAssetsHistory(
+              (com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest) request,
+              (io.grpc.stub.StreamObserver<
+                      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse>)
+                  responseObserver);
+          break;
+        case METHODID_CREATE_FEED:
+          serviceImpl.createFeed(
+              (com.google.cloud.asset.v1p2beta1.CreateFeedRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed>)
+                  responseObserver);
+          break;
+        case METHODID_GET_FEED:
+          serviceImpl.getFeed(
+              (com.google.cloud.asset.v1p2beta1.GetFeedRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed>)
+                  responseObserver);
+          break;
+        case METHODID_LIST_FEEDS:
+          serviceImpl.listFeeds(
+              (com.google.cloud.asset.v1p2beta1.ListFeedsRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.ListFeedsResponse>)
+                  responseObserver);
+          break;
+        case METHODID_UPDATE_FEED:
+          serviceImpl.updateFeed(
+              (com.google.cloud.asset.v1p2beta1.UpdateFeedRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.cloud.asset.v1p2beta1.Feed>)
+                  responseObserver);
+          break;
+        case METHODID_DELETE_FEED:
+          serviceImpl.deleteFeed(
+              (com.google.cloud.asset.v1p2beta1.DeleteFeedRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.protobuf.Empty>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private abstract static class AssetServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier,
+          io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    AssetServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("AssetService");
+    }
+  }
+
+  private static final class AssetServiceFileDescriptorSupplier
+      extends AssetServiceBaseDescriptorSupplier {
+    AssetServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class AssetServiceMethodDescriptorSupplier
+      extends AssetServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    AssetServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (AssetServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor =
+              result =
+                  io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+                      .setSchemaDescriptor(new AssetServiceFileDescriptorSupplier())
+                      .addMethod(getExportAssetsMethodHelper())
+                      .addMethod(getBatchGetAssetsHistoryMethodHelper())
+                      .addMethod(getCreateFeedMethodHelper())
+                      .addMethod(getGetFeedMethodHelper())
+                      .addMethod(getListFeedsMethodHelper())
+                      .addMethod(getUpdateFeedMethodHelper())
+                      .addMethod(getDeleteFeedMethodHelper())
+                      .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Asset.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Asset.java
new file mode 100644
index 000000000000..30f03798f2b2
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Asset.java
@@ -0,0 +1,1710 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Cloud asset. This includes all Google Cloud Platform resources,
+ * Cloud IAM policies, and other non-GCP assets.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.Asset}
+ */
+public final class Asset extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.Asset)
+    AssetOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use Asset.newBuilder() to construct.
+  private Asset(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private Asset() {
+    name_ = "";
+    assetType_ = "";
+    iamPolicyName_ = com.google.protobuf.ByteString.EMPTY;
+    ancestors_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private Asset(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              assetType_ = s;
+              break;
+            }
+          case 26:
+            {
+              com.google.cloud.asset.v1p2beta1.Resource.Builder subBuilder = null;
+              if (resource_ != null) {
+                subBuilder = resource_.toBuilder();
+              }
+              resource_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.Resource.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(resource_);
+                resource_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 34:
+            {
+              com.google.iam.v1.Policy.Builder subBuilder = null;
+              if (iamPolicy_ != null) {
+                subBuilder = iamPolicy_.toBuilder();
+              }
+              iamPolicy_ = input.readMessage(com.google.iam.v1.Policy.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(iamPolicy_);
+                iamPolicy_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 42:
+            {
+              iamPolicyName_ = input.readBytes();
+              break;
+            }
+          case 50:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000020) != 0)) {
+                ancestors_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000020;
+              }
+              ancestors_.add(s);
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000020) != 0)) {
+        ancestors_ = ancestors_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_Asset_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.Asset.class,
+            com.google.cloud.asset.v1p2beta1.Asset.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int NAME_FIELD_NUMBER = 1;
+  private volatile java.lang.Object name_;
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the asset. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public java.lang.String getName() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      name_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the asset. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public com.google.protobuf.ByteString getNameBytes() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      name_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int ASSET_TYPE_FIELD_NUMBER = 2;
+  private volatile java.lang.Object assetType_;
+  /**
+   *
+   *
+   * <pre>
+   * Type of the asset. Example: "compute.googleapis.com/Disk".
+   * </pre>
+   *
+   * <code>string asset_type = 2;</code>
+   */
+  public java.lang.String getAssetType() {
+    java.lang.Object ref = assetType_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      assetType_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Type of the asset. Example: "compute.googleapis.com/Disk".
+   * </pre>
+   *
+   * <code>string asset_type = 2;</code>
+   */
+  public com.google.protobuf.ByteString getAssetTypeBytes() {
+    java.lang.Object ref = assetType_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      assetType_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int RESOURCE_FIELD_NUMBER = 3;
+  private com.google.cloud.asset.v1p2beta1.Resource resource_;
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  public boolean hasResource() {
+    return resource_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.Resource getResource() {
+    return resource_ == null
+        ? com.google.cloud.asset.v1p2beta1.Resource.getDefaultInstance()
+        : resource_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.ResourceOrBuilder getResourceOrBuilder() {
+    return getResource();
+  }
+
+  public static final int IAM_POLICY_FIELD_NUMBER = 4;
+  private com.google.iam.v1.Policy iamPolicy_;
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  public boolean hasIamPolicy() {
+    return iamPolicy_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  public com.google.iam.v1.Policy getIamPolicy() {
+    return iamPolicy_ == null ? com.google.iam.v1.Policy.getDefaultInstance() : iamPolicy_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  public com.google.iam.v1.PolicyOrBuilder getIamPolicyOrBuilder() {
+    return getIamPolicy();
+  }
+
+  public static final int IAM_POLICY_NAME_FIELD_NUMBER = 5;
+  private com.google.protobuf.ByteString iamPolicyName_;
+  /**
+   *
+   *
+   * <pre>
+   * Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy name associated
+   * with it.
+   * </pre>
+   *
+   * <code>bytes iam_policy_name = 5;</code>
+   */
+  public com.google.protobuf.ByteString getIamPolicyName() {
+    return iamPolicyName_;
+  }
+
+  public static final int ANCESTORS_FIELD_NUMBER = 6;
+  private com.google.protobuf.LazyStringList ancestors_;
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  public com.google.protobuf.ProtocolStringList getAncestorsList() {
+    return ancestors_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  public int getAncestorsCount() {
+    return ancestors_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  public java.lang.String getAncestors(int index) {
+    return ancestors_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  public com.google.protobuf.ByteString getAncestorsBytes(int index) {
+    return ancestors_.getByteString(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+    }
+    if (!getAssetTypeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, assetType_);
+    }
+    if (resource_ != null) {
+      output.writeMessage(3, getResource());
+    }
+    if (iamPolicy_ != null) {
+      output.writeMessage(4, getIamPolicy());
+    }
+    if (!iamPolicyName_.isEmpty()) {
+      output.writeBytes(5, iamPolicyName_);
+    }
+    for (int i = 0; i < ancestors_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, ancestors_.getRaw(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+    }
+    if (!getAssetTypeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, assetType_);
+    }
+    if (resource_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getResource());
+    }
+    if (iamPolicy_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getIamPolicy());
+    }
+    if (!iamPolicyName_.isEmpty()) {
+      size += com.google.protobuf.CodedOutputStream.computeBytesSize(5, iamPolicyName_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < ancestors_.size(); i++) {
+        dataSize += computeStringSizeNoTag(ancestors_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAncestorsList().size();
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.Asset)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.Asset other = (com.google.cloud.asset.v1p2beta1.Asset) obj;
+
+    if (!getName().equals(other.getName())) return false;
+    if (!getAssetType().equals(other.getAssetType())) return false;
+    if (hasResource() != other.hasResource()) return false;
+    if (hasResource()) {
+      if (!getResource().equals(other.getResource())) return false;
+    }
+    if (hasIamPolicy() != other.hasIamPolicy()) return false;
+    if (hasIamPolicy()) {
+      if (!getIamPolicy().equals(other.getIamPolicy())) return false;
+    }
+    if (!getIamPolicyName().equals(other.getIamPolicyName())) return false;
+    if (!getAncestorsList().equals(other.getAncestorsList())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getName().hashCode();
+    hash = (37 * hash) + ASSET_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + getAssetType().hashCode();
+    if (hasResource()) {
+      hash = (37 * hash) + RESOURCE_FIELD_NUMBER;
+      hash = (53 * hash) + getResource().hashCode();
+    }
+    if (hasIamPolicy()) {
+      hash = (37 * hash) + IAM_POLICY_FIELD_NUMBER;
+      hash = (53 * hash) + getIamPolicy().hashCode();
+    }
+    hash = (37 * hash) + IAM_POLICY_NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getIamPolicyName().hashCode();
+    if (getAncestorsCount() > 0) {
+      hash = (37 * hash) + ANCESTORS_FIELD_NUMBER;
+      hash = (53 * hash) + getAncestorsList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.Asset prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Cloud asset. This includes all Google Cloud Platform resources,
+   * Cloud IAM policies, and other non-GCP assets.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.Asset}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.Asset)
+      com.google.cloud.asset.v1p2beta1.AssetOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Asset_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.Asset.class,
+              com.google.cloud.asset.v1p2beta1.Asset.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.Asset.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      name_ = "";
+
+      assetType_ = "";
+
+      if (resourceBuilder_ == null) {
+        resource_ = null;
+      } else {
+        resource_ = null;
+        resourceBuilder_ = null;
+      }
+      if (iamPolicyBuilder_ == null) {
+        iamPolicy_ = null;
+      } else {
+        iamPolicy_ = null;
+        iamPolicyBuilder_ = null;
+      }
+      iamPolicyName_ = com.google.protobuf.ByteString.EMPTY;
+
+      ancestors_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000020);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Asset getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.Asset.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Asset build() {
+      com.google.cloud.asset.v1p2beta1.Asset result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Asset buildPartial() {
+      com.google.cloud.asset.v1p2beta1.Asset result =
+          new com.google.cloud.asset.v1p2beta1.Asset(this);
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      result.name_ = name_;
+      result.assetType_ = assetType_;
+      if (resourceBuilder_ == null) {
+        result.resource_ = resource_;
+      } else {
+        result.resource_ = resourceBuilder_.build();
+      }
+      if (iamPolicyBuilder_ == null) {
+        result.iamPolicy_ = iamPolicy_;
+      } else {
+        result.iamPolicy_ = iamPolicyBuilder_.build();
+      }
+      result.iamPolicyName_ = iamPolicyName_;
+      if (((bitField0_ & 0x00000020) != 0)) {
+        ancestors_ = ancestors_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000020);
+      }
+      result.ancestors_ = ancestors_;
+      result.bitField0_ = to_bitField0_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.Asset) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.Asset) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.Asset other) {
+      if (other == com.google.cloud.asset.v1p2beta1.Asset.getDefaultInstance()) return this;
+      if (!other.getName().isEmpty()) {
+        name_ = other.name_;
+        onChanged();
+      }
+      if (!other.getAssetType().isEmpty()) {
+        assetType_ = other.assetType_;
+        onChanged();
+      }
+      if (other.hasResource()) {
+        mergeResource(other.getResource());
+      }
+      if (other.hasIamPolicy()) {
+        mergeIamPolicy(other.getIamPolicy());
+      }
+      if (other.getIamPolicyName() != com.google.protobuf.ByteString.EMPTY) {
+        setIamPolicyName(other.getIamPolicyName());
+      }
+      if (!other.ancestors_.isEmpty()) {
+        if (ancestors_.isEmpty()) {
+          ancestors_ = other.ancestors_;
+          bitField0_ = (bitField0_ & ~0x00000020);
+        } else {
+          ensureAncestorsIsMutable();
+          ancestors_.addAll(other.ancestors_);
+        }
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.Asset parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.Asset) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.lang.Object name_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the asset. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the asset. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the asset. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the asset. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder clearName() {
+
+      name_ = getDefaultInstance().getName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the asset. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object assetType_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Type of the asset. Example: "compute.googleapis.com/Disk".
+     * </pre>
+     *
+     * <code>string asset_type = 2;</code>
+     */
+    public java.lang.String getAssetType() {
+      java.lang.Object ref = assetType_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        assetType_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Type of the asset. Example: "compute.googleapis.com/Disk".
+     * </pre>
+     *
+     * <code>string asset_type = 2;</code>
+     */
+    public com.google.protobuf.ByteString getAssetTypeBytes() {
+      java.lang.Object ref = assetType_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        assetType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Type of the asset. Example: "compute.googleapis.com/Disk".
+     * </pre>
+     *
+     * <code>string asset_type = 2;</code>
+     */
+    public Builder setAssetType(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      assetType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Type of the asset. Example: "compute.googleapis.com/Disk".
+     * </pre>
+     *
+     * <code>string asset_type = 2;</code>
+     */
+    public Builder clearAssetType() {
+
+      assetType_ = getDefaultInstance().getAssetType();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Type of the asset. Example: "compute.googleapis.com/Disk".
+     * </pre>
+     *
+     * <code>string asset_type = 2;</code>
+     */
+    public Builder setAssetTypeBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      assetType_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.Resource resource_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Resource,
+            com.google.cloud.asset.v1p2beta1.Resource.Builder,
+            com.google.cloud.asset.v1p2beta1.ResourceOrBuilder>
+        resourceBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public boolean hasResource() {
+      return resourceBuilder_ != null || resource_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Resource getResource() {
+      if (resourceBuilder_ == null) {
+        return resource_ == null
+            ? com.google.cloud.asset.v1p2beta1.Resource.getDefaultInstance()
+            : resource_;
+      } else {
+        return resourceBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public Builder setResource(com.google.cloud.asset.v1p2beta1.Resource value) {
+      if (resourceBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        resource_ = value;
+        onChanged();
+      } else {
+        resourceBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public Builder setResource(com.google.cloud.asset.v1p2beta1.Resource.Builder builderForValue) {
+      if (resourceBuilder_ == null) {
+        resource_ = builderForValue.build();
+        onChanged();
+      } else {
+        resourceBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public Builder mergeResource(com.google.cloud.asset.v1p2beta1.Resource value) {
+      if (resourceBuilder_ == null) {
+        if (resource_ != null) {
+          resource_ =
+              com.google.cloud.asset.v1p2beta1.Resource.newBuilder(resource_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          resource_ = value;
+        }
+        onChanged();
+      } else {
+        resourceBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public Builder clearResource() {
+      if (resourceBuilder_ == null) {
+        resource_ = null;
+        onChanged();
+      } else {
+        resource_ = null;
+        resourceBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Resource.Builder getResourceBuilder() {
+
+      onChanged();
+      return getResourceFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.ResourceOrBuilder getResourceOrBuilder() {
+      if (resourceBuilder_ != null) {
+        return resourceBuilder_.getMessageOrBuilder();
+      } else {
+        return resource_ == null
+            ? com.google.cloud.asset.v1p2beta1.Resource.getDefaultInstance()
+            : resource_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the resource.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Resource,
+            com.google.cloud.asset.v1p2beta1.Resource.Builder,
+            com.google.cloud.asset.v1p2beta1.ResourceOrBuilder>
+        getResourceFieldBuilder() {
+      if (resourceBuilder_ == null) {
+        resourceBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.Resource,
+                com.google.cloud.asset.v1p2beta1.Resource.Builder,
+                com.google.cloud.asset.v1p2beta1.ResourceOrBuilder>(
+                getResource(), getParentForChildren(), isClean());
+        resource_ = null;
+      }
+      return resourceBuilder_;
+    }
+
+    private com.google.iam.v1.Policy iamPolicy_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.iam.v1.Policy,
+            com.google.iam.v1.Policy.Builder,
+            com.google.iam.v1.PolicyOrBuilder>
+        iamPolicyBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public boolean hasIamPolicy() {
+      return iamPolicyBuilder_ != null || iamPolicy_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public com.google.iam.v1.Policy getIamPolicy() {
+      if (iamPolicyBuilder_ == null) {
+        return iamPolicy_ == null ? com.google.iam.v1.Policy.getDefaultInstance() : iamPolicy_;
+      } else {
+        return iamPolicyBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public Builder setIamPolicy(com.google.iam.v1.Policy value) {
+      if (iamPolicyBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        iamPolicy_ = value;
+        onChanged();
+      } else {
+        iamPolicyBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public Builder setIamPolicy(com.google.iam.v1.Policy.Builder builderForValue) {
+      if (iamPolicyBuilder_ == null) {
+        iamPolicy_ = builderForValue.build();
+        onChanged();
+      } else {
+        iamPolicyBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public Builder mergeIamPolicy(com.google.iam.v1.Policy value) {
+      if (iamPolicyBuilder_ == null) {
+        if (iamPolicy_ != null) {
+          iamPolicy_ =
+              com.google.iam.v1.Policy.newBuilder(iamPolicy_).mergeFrom(value).buildPartial();
+        } else {
+          iamPolicy_ = value;
+        }
+        onChanged();
+      } else {
+        iamPolicyBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public Builder clearIamPolicy() {
+      if (iamPolicyBuilder_ == null) {
+        iamPolicy_ = null;
+        onChanged();
+      } else {
+        iamPolicy_ = null;
+        iamPolicyBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public com.google.iam.v1.Policy.Builder getIamPolicyBuilder() {
+
+      onChanged();
+      return getIamPolicyFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    public com.google.iam.v1.PolicyOrBuilder getIamPolicyOrBuilder() {
+      if (iamPolicyBuilder_ != null) {
+        return iamPolicyBuilder_.getMessageOrBuilder();
+      } else {
+        return iamPolicy_ == null ? com.google.iam.v1.Policy.getDefaultInstance() : iamPolicy_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Representation of the actual Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy set on it.
+     * </pre>
+     *
+     * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.iam.v1.Policy,
+            com.google.iam.v1.Policy.Builder,
+            com.google.iam.v1.PolicyOrBuilder>
+        getIamPolicyFieldBuilder() {
+      if (iamPolicyBuilder_ == null) {
+        iamPolicyBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.iam.v1.Policy,
+                com.google.iam.v1.Policy.Builder,
+                com.google.iam.v1.PolicyOrBuilder>(
+                getIamPolicy(), getParentForChildren(), isClean());
+        iamPolicy_ = null;
+      }
+      return iamPolicyBuilder_;
+    }
+
+    private com.google.protobuf.ByteString iamPolicyName_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     *
+     *
+     * <pre>
+     * Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy name associated
+     * with it.
+     * </pre>
+     *
+     * <code>bytes iam_policy_name = 5;</code>
+     */
+    public com.google.protobuf.ByteString getIamPolicyName() {
+      return iamPolicyName_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy name associated
+     * with it.
+     * </pre>
+     *
+     * <code>bytes iam_policy_name = 5;</code>
+     */
+    public Builder setIamPolicyName(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      iamPolicyName_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+     * each resource, there must be at most one Cloud IAM policy name associated
+     * with it.
+     * </pre>
+     *
+     * <code>bytes iam_policy_name = 5;</code>
+     */
+    public Builder clearIamPolicyName() {
+
+      iamPolicyName_ = getDefaultInstance().getIamPolicyName();
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList ancestors_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
+
+    private void ensureAncestorsIsMutable() {
+      if (!((bitField0_ & 0x00000020) != 0)) {
+        ancestors_ = new com.google.protobuf.LazyStringArrayList(ancestors_);
+        bitField0_ |= 0x00000020;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public com.google.protobuf.ProtocolStringList getAncestorsList() {
+      return ancestors_.getUnmodifiableView();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public int getAncestorsCount() {
+      return ancestors_.size();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public java.lang.String getAncestors(int index) {
+      return ancestors_.get(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public com.google.protobuf.ByteString getAncestorsBytes(int index) {
+      return ancestors_.getByteString(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public Builder setAncestors(int index, java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAncestorsIsMutable();
+      ancestors_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public Builder addAncestors(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAncestorsIsMutable();
+      ancestors_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public Builder addAllAncestors(java.lang.Iterable<java.lang.String> values) {
+      ensureAncestorsIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ancestors_);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public Builder clearAncestors() {
+      ancestors_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+     * represented as a list of relative resource names. Ancestry path starts with
+     * the closest CRM ancestor and ending at a visible root. If the asset is a
+     * CRM project/ folder/organization, this starts from the asset itself.
+     * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+     * </pre>
+     *
+     * <code>repeated string ancestors = 6;</code>
+     */
+    public Builder addAncestorsBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      ensureAncestorsIsMutable();
+      ancestors_.add(value);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.Asset)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.Asset)
+  private static final com.google.cloud.asset.v1p2beta1.Asset DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.Asset();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Asset getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Asset> PARSER =
+      new com.google.protobuf.AbstractParser<Asset>() {
+        @java.lang.Override
+        public Asset parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new Asset(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<Asset> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Asset> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.Asset getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetOrBuilder.java
new file mode 100644
index 000000000000..f242fd9ccf18
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetOrBuilder.java
@@ -0,0 +1,195 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface AssetOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.Asset)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the asset. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  java.lang.String getName();
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the asset. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  com.google.protobuf.ByteString getNameBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Type of the asset. Example: "compute.googleapis.com/Disk".
+   * </pre>
+   *
+   * <code>string asset_type = 2;</code>
+   */
+  java.lang.String getAssetType();
+  /**
+   *
+   *
+   * <pre>
+   * Type of the asset. Example: "compute.googleapis.com/Disk".
+   * </pre>
+   *
+   * <code>string asset_type = 2;</code>
+   */
+  com.google.protobuf.ByteString getAssetTypeBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  boolean hasResource();
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.Resource getResource();
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the resource.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Resource resource = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.ResourceOrBuilder getResourceOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  boolean hasIamPolicy();
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  com.google.iam.v1.Policy getIamPolicy();
+  /**
+   *
+   *
+   * <pre>
+   * Representation of the actual Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy set on it.
+   * </pre>
+   *
+   * <code>.google.iam.v1.Policy iam_policy = 4;</code>
+   */
+  com.google.iam.v1.PolicyOrBuilder getIamPolicyOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+   * each resource, there must be at most one Cloud IAM policy name associated
+   * with it.
+   * </pre>
+   *
+   * <code>bytes iam_policy_name = 5;</code>
+   */
+  com.google.protobuf.ByteString getIamPolicyName();
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  java.util.List<java.lang.String> getAncestorsList();
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  int getAncestorsCount();
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  java.lang.String getAncestors(int index);
+  /**
+   *
+   *
+   * <pre>
+   * Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+   * represented as a list of relative resource names. Ancestry path starts with
+   * the closest CRM ancestor and ending at a visible root. If the asset is a
+   * CRM project/ folder/organization, this starts from the asset itself.
+   * Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+   * </pre>
+   *
+   * <code>repeated string ancestors = 6;</code>
+   */
+  com.google.protobuf.ByteString getAncestorsBytes(int index);
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetProto.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetProto.java
new file mode 100644
index 000000000000..8e8ce022e09f
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetProto.java
@@ -0,0 +1,132 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public final class AssetProto {
+  private AssetProto() {}
+
+  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {}
+
+  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_TimeWindow_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_Asset_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_Resource_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+    return descriptor;
+  }
+
+  private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
+
+  static {
+    java.lang.String[] descriptorData = {
+      "\n)google/cloud/asset/v1p2beta1/assets.pr"
+          + "oto\022\034google.cloud.asset.v1p2beta1\032\034googl"
+          + "e/api/annotations.proto\032\032google/iam/v1/p"
+          + "olicy.proto\032\031google/protobuf/any.proto\032\034"
+          + "google/protobuf/struct.proto\032\037google/pro"
+          + "tobuf/timestamp.proto\"\216\001\n\rTemporalAsset\022"
+          + "8\n\006window\030\001 \001(\0132(.google.cloud.asset.v1p"
+          + "2beta1.TimeWindow\022\017\n\007deleted\030\002 \001(\010\0222\n\005as"
+          + "set\030\003 \001(\0132#.google.cloud.asset.v1p2beta1"
+          + ".Asset\"j\n\nTimeWindow\022.\n\nstart_time\030\001 \001(\013"
+          + "2\032.google.protobuf.Timestamp\022,\n\010end_time"
+          + "\030\002 \001(\0132\032.google.protobuf.Timestamp\"\272\001\n\005A"
+          + "sset\022\014\n\004name\030\001 \001(\t\022\022\n\nasset_type\030\002 \001(\t\0228"
+          + "\n\010resource\030\003 \001(\0132&.google.cloud.asset.v1"
+          + "p2beta1.Resource\022)\n\niam_policy\030\004 \001(\0132\025.g"
+          + "oogle.iam.v1.Policy\022\027\n\017iam_policy_name\030\005"
+          + " \001(\014\022\021\n\tancestors\030\006 \003(\t\"\315\001\n\010Resource\022\017\n\007"
+          + "version\030\001 \001(\t\022\036\n\026discovery_document_uri\030"
+          + "\002 \001(\t\022\026\n\016discovery_name\030\003 \001(\t\022\024\n\014resourc"
+          + "e_url\030\004 \001(\t\022\016\n\006parent\030\005 \001(\t\022%\n\004data\030\006 \001("
+          + "\0132\027.google.protobuf.Struct\022+\n\rinternal_d"
+          + "ata\030\007 \001(\0132\024.google.protobuf.AnyB\264\001\n com."
+          + "google.cloud.asset.v1p2beta1B\nAssetProto"
+          + "P\001ZAgoogle.golang.org/genproto/googleapi"
+          + "s/cloud/asset/v1p2beta1;asset\370\001\001\252\002\034Googl"
+          + "e.Cloud.Asset.v1p2beta1\312\002\034Google\\Cloud\\A"
+          + "sset\\v1p2beta1b\006proto3"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+        new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+          public com.google.protobuf.ExtensionRegistry assignDescriptors(
+              com.google.protobuf.Descriptors.FileDescriptor root) {
+            descriptor = root;
+            return null;
+          }
+        };
+    com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
+        descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          com.google.api.AnnotationsProto.getDescriptor(),
+          com.google.iam.v1.PolicyProto.getDescriptor(),
+          com.google.protobuf.AnyProto.getDescriptor(),
+          com.google.protobuf.StructProto.getDescriptor(),
+          com.google.protobuf.TimestampProto.getDescriptor(),
+        },
+        assigner);
+    internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor =
+        getDescriptor().getMessageTypes().get(0);
+    internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor,
+            new java.lang.String[] {
+              "Window", "Deleted", "Asset",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor =
+        getDescriptor().getMessageTypes().get(1);
+    internal_static_google_cloud_asset_v1p2beta1_TimeWindow_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor,
+            new java.lang.String[] {
+              "StartTime", "EndTime",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor =
+        getDescriptor().getMessageTypes().get(2);
+    internal_static_google_cloud_asset_v1p2beta1_Asset_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_Asset_descriptor,
+            new java.lang.String[] {
+              "Name", "AssetType", "Resource", "IamPolicy", "IamPolicyName", "Ancestors",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor =
+        getDescriptor().getMessageTypes().get(3);
+    internal_static_google_cloud_asset_v1p2beta1_Resource_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor,
+            new java.lang.String[] {
+              "Version",
+              "DiscoveryDocumentUri",
+              "DiscoveryName",
+              "ResourceUrl",
+              "Parent",
+              "Data",
+              "InternalData",
+            });
+    com.google.api.AnnotationsProto.getDescriptor();
+    com.google.iam.v1.PolicyProto.getDescriptor();
+    com.google.protobuf.AnyProto.getDescriptor();
+    com.google.protobuf.StructProto.getDescriptor();
+    com.google.protobuf.TimestampProto.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceProto.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceProto.java
new file mode 100644
index 000000000000..5375b0c18b12
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceProto.java
@@ -0,0 +1,343 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public final class AssetServiceProto {
+  private AssetServiceProto() {}
+
+  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {}
+
+  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_OutputConfig_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_GcsDestination_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_asset_v1p2beta1_Feed_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+    return descriptor;
+  }
+
+  private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
+
+  static {
+    java.lang.String[] descriptorData = {
+      "\n0google/cloud/asset/v1p2beta1/asset_ser"
+          + "vice.proto\022\034google.cloud.asset.v1p2beta1"
+          + "\032\034google/api/annotations.proto\032)google/c"
+          + "loud/asset/v1p2beta1/assets.proto\032#googl"
+          + "e/longrunning/operations.proto\032\033google/p"
+          + "rotobuf/empty.proto\032 google/protobuf/fie"
+          + "ld_mask.proto\032\037google/protobuf/timestamp"
+          + ".proto\032\027google/api/client.proto\"\355\001\n\023Expo"
+          + "rtAssetsRequest\022\016\n\006parent\030\001 \001(\t\022-\n\tread_"
+          + "time\030\002 \001(\0132\032.google.protobuf.Timestamp\022\023"
+          + "\n\013asset_types\030\003 \003(\t\022?\n\014content_type\030\004 \001("
+          + "\0162).google.cloud.asset.v1p2beta1.Content"
+          + "Type\022A\n\routput_config\030\005 \001(\0132*.google.clo"
+          + "ud.asset.v1p2beta1.OutputConfig\"\210\001\n\024Expo"
+          + "rtAssetsResponse\022-\n\tread_time\030\001 \001(\0132\032.go"
+          + "ogle.protobuf.Timestamp\022A\n\routput_config"
+          + "\030\002 \001(\0132*.google.cloud.asset.v1p2beta1.Ou"
+          + "tputConfig\"\310\001\n\034BatchGetAssetsHistoryRequ"
+          + "est\022\016\n\006parent\030\001 \001(\t\022\023\n\013asset_names\030\002 \003(\t"
+          + "\022?\n\014content_type\030\003 \001(\0162).google.cloud.as"
+          + "set.v1p2beta1.ContentType\022B\n\020read_time_w"
+          + "indow\030\004 \001(\0132(.google.cloud.asset.v1p2bet"
+          + "a1.TimeWindow\"\\\n\035BatchGetAssetsHistoryRe"
+          + "sponse\022;\n\006assets\030\001 \003(\0132+.google.cloud.as"
+          + "set.v1p2beta1.TemporalAsset\"f\n\021CreateFee"
+          + "dRequest\022\016\n\006parent\030\001 \001(\t\022\017\n\007feed_id\030\002 \001("
+          + "\t\0220\n\004feed\030\003 \001(\0132\".google.cloud.asset.v1p"
+          + "2beta1.Feed\"\036\n\016GetFeedRequest\022\014\n\004name\030\001 "
+          + "\001(\t\"\"\n\020ListFeedsRequest\022\016\n\006parent\030\001 \001(\t\""
+          + "F\n\021ListFeedsResponse\0221\n\005feeds\030\001 \003(\0132\".go"
+          + "ogle.cloud.asset.v1p2beta1.Feed\"v\n\021Updat"
+          + "eFeedRequest\0220\n\004feed\030\001 \001(\0132\".google.clou"
+          + "d.asset.v1p2beta1.Feed\022/\n\013update_mask\030\002 "
+          + "\001(\0132\032.google.protobuf.FieldMask\"!\n\021Delet"
+          + "eFeedRequest\022\014\n\004name\030\001 \001(\t\"\271\001\n\014OutputCon"
+          + "fig\022G\n\017gcs_destination\030\001 \001(\0132,.google.cl"
+          + "oud.asset.v1p2beta1.GcsDestinationH\000\022Q\n\024"
+          + "bigquery_destination\030\002 \001(\01321.google.clou"
+          + "d.asset.v1p2beta1.BigQueryDestinationH\000B"
+          + "\r\n\013destination\"C\n\016GcsDestination\022\r\n\003uri\030"
+          + "\001 \001(\tH\000\022\024\n\nuri_prefix\030\002 \001(\tH\000B\014\n\nobject_"
+          + "uri\"D\n\023BigQueryDestination\022\017\n\007dataset\030\001 "
+          + "\001(\t\022\r\n\005table\030\002 \001(\t\022\r\n\005force\030\003 \001(\010\"\"\n\021Pub"
+          + "subDestination\022\r\n\005topic\030\001 \001(\t\"p\n\020FeedOut"
+          + "putConfig\022M\n\022pubsub_destination\030\001 \001(\0132/."
+          + "google.cloud.asset.v1p2beta1.PubsubDesti"
+          + "nationH\000B\r\n\013destination\"\313\001\n\004Feed\022\014\n\004name"
+          + "\030\001 \001(\t\022\023\n\013asset_names\030\002 \003(\t\022\023\n\013asset_typ"
+          + "es\030\003 \003(\t\022?\n\014content_type\030\004 \001(\0162).google."
+          + "cloud.asset.v1p2beta1.ContentType\022J\n\022fee"
+          + "d_output_config\030\005 \001(\0132..google.cloud.ass"
+          + "et.v1p2beta1.FeedOutputConfig*\201\001\n\013Conten"
+          + "tType\022\034\n\030CONTENT_TYPE_UNSPECIFIED\020\000\022\014\n\010R"
+          + "ESOURCE\020\001\022\016\n\nIAM_POLICY\020\002\022\023\n\017IAM_POLICY_"
+          + "NAME\020\003\022\016\n\nORG_POLICY\020\004\022\021\n\rACCESS_POLICY\020"
+          + "\0052\365\010\n\014AssetService\022\221\001\n\014ExportAssets\0221.go"
+          + "ogle.cloud.asset.v1p2beta1.ExportAssetsR"
+          + "equest\032\035.google.longrunning.Operation\"/\202"
+          + "\323\344\223\002)\"$/v1p2beta1/{parent=*/*}:exportAss"
+          + "ets:\001*\022\307\001\n\025BatchGetAssetsHistory\022:.googl"
+          + "e.cloud.asset.v1p2beta1.BatchGetAssetsHi"
+          + "storyRequest\032;.google.cloud.asset.v1p2be"
+          + "ta1.BatchGetAssetsHistoryResponse\"5\202\323\344\223\002"
+          + "/\022-/v1p2beta1/{parent=*/*}:batchGetAsset"
+          + "sHistory\022\213\001\n\nCreateFeed\022/.google.cloud.a"
+          + "sset.v1p2beta1.CreateFeedRequest\032\".googl"
+          + "e.cloud.asset.v1p2beta1.Feed\"(\202\323\344\223\002\"\"\035/v"
+          + "1p2beta1/{parent=*/*}/feeds:\001*\022\202\001\n\007GetFe"
+          + "ed\022,.google.cloud.asset.v1p2beta1.GetFee"
+          + "dRequest\032\".google.cloud.asset.v1p2beta1."
+          + "Feed\"%\202\323\344\223\002\037\022\035/v1p2beta1/{name=*/*/feeds"
+          + "/*}\022\223\001\n\tListFeeds\022..google.cloud.asset.v"
+          + "1p2beta1.ListFeedsRequest\032/.google.cloud"
+          + ".asset.v1p2beta1.ListFeedsResponse\"%\202\323\344\223"
+          + "\002\037\022\035/v1p2beta1/{parent=*/*}/feeds\022\220\001\n\nUp"
+          + "dateFeed\022/.google.cloud.asset.v1p2beta1."
+          + "UpdateFeedRequest\032\".google.cloud.asset.v"
+          + "1p2beta1.Feed\"-\202\323\344\223\002\'2\"/v1p2beta1/{feed."
+          + "name=*/*/feeds/*}:\001*\022|\n\nDeleteFeed\022/.goo"
+          + "gle.cloud.asset.v1p2beta1.DeleteFeedRequ"
+          + "est\032\026.google.protobuf.Empty\"%\202\323\344\223\002\037*\035/v1"
+          + "p2beta1/{name=*/*/feeds/*}\032M\312A\031cloudasse"
+          + "t.googleapis.com\322A.https://www.googleapi"
+          + "s.com/auth/cloud-platformB\270\001\n com.google"
+          + ".cloud.asset.v1p2beta1B\021AssetServiceProt"
+          + "oP\001ZAgoogle.golang.org/genproto/googleap"
+          + "is/cloud/asset/v1p2beta1;asset\252\002\034Google."
+          + "Cloud.Asset.V1p2Beta1\312\002\034Google\\Cloud\\Ass"
+          + "et\\V1p2Beta1b\006proto3"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+        new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+          public com.google.protobuf.ExtensionRegistry assignDescriptors(
+              com.google.protobuf.Descriptors.FileDescriptor root) {
+            descriptor = root;
+            return null;
+          }
+        };
+    com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
+        descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          com.google.api.AnnotationsProto.getDescriptor(),
+          com.google.cloud.asset.v1p2beta1.AssetProto.getDescriptor(),
+          com.google.longrunning.OperationsProto.getDescriptor(),
+          com.google.protobuf.EmptyProto.getDescriptor(),
+          com.google.protobuf.FieldMaskProto.getDescriptor(),
+          com.google.protobuf.TimestampProto.getDescriptor(),
+          com.google.api.ClientProto.getDescriptor(),
+        },
+        assigner);
+    internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor =
+        getDescriptor().getMessageTypes().get(0);
+    internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor,
+            new java.lang.String[] {
+              "Parent", "ReadTime", "AssetTypes", "ContentType", "OutputConfig",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor =
+        getDescriptor().getMessageTypes().get(1);
+    internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor,
+            new java.lang.String[] {
+              "ReadTime", "OutputConfig",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor =
+        getDescriptor().getMessageTypes().get(2);
+    internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor,
+            new java.lang.String[] {
+              "Parent", "AssetNames", "ContentType", "ReadTimeWindow",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor =
+        getDescriptor().getMessageTypes().get(3);
+    internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor,
+            new java.lang.String[] {
+              "Assets",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor =
+        getDescriptor().getMessageTypes().get(4);
+    internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor,
+            new java.lang.String[] {
+              "Parent", "FeedId", "Feed",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor =
+        getDescriptor().getMessageTypes().get(5);
+    internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor,
+            new java.lang.String[] {
+              "Name",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor =
+        getDescriptor().getMessageTypes().get(6);
+    internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor,
+            new java.lang.String[] {
+              "Parent",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor =
+        getDescriptor().getMessageTypes().get(7);
+    internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor,
+            new java.lang.String[] {
+              "Feeds",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor =
+        getDescriptor().getMessageTypes().get(8);
+    internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor,
+            new java.lang.String[] {
+              "Feed", "UpdateMask",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor =
+        getDescriptor().getMessageTypes().get(9);
+    internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor,
+            new java.lang.String[] {
+              "Name",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor =
+        getDescriptor().getMessageTypes().get(10);
+    internal_static_google_cloud_asset_v1p2beta1_OutputConfig_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor,
+            new java.lang.String[] {
+              "GcsDestination", "BigqueryDestination", "Destination",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor =
+        getDescriptor().getMessageTypes().get(11);
+    internal_static_google_cloud_asset_v1p2beta1_GcsDestination_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor,
+            new java.lang.String[] {
+              "Uri", "UriPrefix", "ObjectUri",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor =
+        getDescriptor().getMessageTypes().get(12);
+    internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor,
+            new java.lang.String[] {
+              "Dataset", "Table", "Force",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor =
+        getDescriptor().getMessageTypes().get(13);
+    internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor,
+            new java.lang.String[] {
+              "Topic",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor =
+        getDescriptor().getMessageTypes().get(14);
+    internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor,
+            new java.lang.String[] {
+              "PubsubDestination", "Destination",
+            });
+    internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor =
+        getDescriptor().getMessageTypes().get(15);
+    internal_static_google_cloud_asset_v1p2beta1_Feed_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor,
+            new java.lang.String[] {
+              "Name", "AssetNames", "AssetTypes", "ContentType", "FeedOutputConfig",
+            });
+    com.google.protobuf.ExtensionRegistry registry =
+        com.google.protobuf.ExtensionRegistry.newInstance();
+    registry.add(com.google.api.ClientProto.defaultHost);
+    registry.add(com.google.api.AnnotationsProto.http);
+    registry.add(com.google.api.ClientProto.oauthScopes);
+    com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
+        descriptor, registry);
+    com.google.api.AnnotationsProto.getDescriptor();
+    com.google.cloud.asset.v1p2beta1.AssetProto.getDescriptor();
+    com.google.longrunning.OperationsProto.getDescriptor();
+    com.google.protobuf.EmptyProto.getDescriptor();
+    com.google.protobuf.FieldMaskProto.getDescriptor();
+    com.google.protobuf.TimestampProto.getDescriptor();
+    com.google.api.ClientProto.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequest.java
new file mode 100644
index 000000000000..d4652665976c
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequest.java
@@ -0,0 +1,1426 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Batch get assets history request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest}
+ */
+public final class BatchGetAssetsHistoryRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+    BatchGetAssetsHistoryRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use BatchGetAssetsHistoryRequest.newBuilder() to construct.
+  private BatchGetAssetsHistoryRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private BatchGetAssetsHistoryRequest() {
+    parent_ = "";
+    assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    contentType_ = 0;
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private BatchGetAssetsHistoryRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              parent_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                assetNames_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              assetNames_.add(s);
+              break;
+            }
+          case 24:
+            {
+              int rawValue = input.readEnum();
+
+              contentType_ = rawValue;
+              break;
+            }
+          case 34:
+            {
+              com.google.cloud.asset.v1p2beta1.TimeWindow.Builder subBuilder = null;
+              if (readTimeWindow_ != null) {
+                subBuilder = readTimeWindow_.toBuilder();
+              }
+              readTimeWindow_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.TimeWindow.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(readTimeWindow_);
+                readTimeWindow_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = assetNames_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.class,
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int PARENT_FIELD_NUMBER = 1;
+  private volatile java.lang.Object parent_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. It can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id")", or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public java.lang.String getParent() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      parent_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. It can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id")", or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public com.google.protobuf.ByteString getParentBytes() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      parent_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int ASSET_NAMES_FIELD_NUMBER = 2;
+  private com.google.protobuf.LazyStringList assetNames_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public com.google.protobuf.ProtocolStringList getAssetNamesList() {
+    return assetNames_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public int getAssetNamesCount() {
+    return assetNames_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public java.lang.String getAssetNames(int index) {
+    return assetNames_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public com.google.protobuf.ByteString getAssetNamesBytes(int index) {
+    return assetNames_.getByteString(index);
+  }
+
+  public static final int CONTENT_TYPE_FIELD_NUMBER = 3;
+  private int contentType_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The content type.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+   */
+  public int getContentTypeValue() {
+    return contentType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The content type.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.asset.v1p2beta1.ContentType result =
+        com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+    return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+  }
+
+  public static final int READ_TIME_WINDOW_FIELD_NUMBER = 4;
+  private com.google.cloud.asset.v1p2beta1.TimeWindow readTimeWindow_;
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  public boolean hasReadTimeWindow() {
+    return readTimeWindow_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TimeWindow getReadTimeWindow() {
+    return readTimeWindow_ == null
+        ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+        : readTimeWindow_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getReadTimeWindowOrBuilder() {
+    return getReadTimeWindow();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getParentBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_);
+    }
+    for (int i = 0; i < assetNames_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, assetNames_.getRaw(i));
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      output.writeEnum(3, contentType_);
+    }
+    if (readTimeWindow_ != null) {
+      output.writeMessage(4, getReadTimeWindow());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getParentBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < assetNames_.size(); i++) {
+        dataSize += computeStringSizeNoTag(assetNames_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAssetNamesList().size();
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, contentType_);
+    }
+    if (readTimeWindow_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getReadTimeWindow());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest other =
+        (com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest) obj;
+
+    if (!getParent().equals(other.getParent())) return false;
+    if (!getAssetNamesList().equals(other.getAssetNamesList())) return false;
+    if (contentType_ != other.contentType_) return false;
+    if (hasReadTimeWindow() != other.hasReadTimeWindow()) return false;
+    if (hasReadTimeWindow()) {
+      if (!getReadTimeWindow().equals(other.getReadTimeWindow())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + PARENT_FIELD_NUMBER;
+    hash = (53 * hash) + getParent().hashCode();
+    if (getAssetNamesCount() > 0) {
+      hash = (37 * hash) + ASSET_NAMES_FIELD_NUMBER;
+      hash = (53 * hash) + getAssetNamesList().hashCode();
+    }
+    hash = (37 * hash) + CONTENT_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + contentType_;
+    if (hasReadTimeWindow()) {
+      hash = (37 * hash) + READ_TIME_WINDOW_FIELD_NUMBER;
+      hash = (53 * hash) + getReadTimeWindow().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Batch get assets history request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.class,
+              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      parent_ = "";
+
+      assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000002);
+      contentType_ = 0;
+
+      if (readTimeWindowBuilder_ == null) {
+        readTimeWindow_ = null;
+      } else {
+        readTimeWindow_ = null;
+        readTimeWindowBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest
+        getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest build() {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest result =
+          new com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest(this);
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      result.parent_ = parent_;
+      if (((bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = assetNames_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000002);
+      }
+      result.assetNames_ = assetNames_;
+      result.contentType_ = contentType_;
+      if (readTimeWindowBuilder_ == null) {
+        result.readTimeWindow_ = readTimeWindow_;
+      } else {
+        result.readTimeWindow_ = readTimeWindowBuilder_.build();
+      }
+      result.bitField0_ = to_bitField0_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest other) {
+      if (other
+          == com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest.getDefaultInstance())
+        return this;
+      if (!other.getParent().isEmpty()) {
+        parent_ = other.parent_;
+        onChanged();
+      }
+      if (!other.assetNames_.isEmpty()) {
+        if (assetNames_.isEmpty()) {
+          assetNames_ = other.assetNames_;
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          ensureAssetNamesIsMutable();
+          assetNames_.addAll(other.assetNames_);
+        }
+        onChanged();
+      }
+      if (other.contentType_ != 0) {
+        setContentTypeValue(other.getContentTypeValue());
+      }
+      if (other.hasReadTimeWindow()) {
+        mergeReadTimeWindow(other.getReadTimeWindow());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+                e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.lang.Object parent_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. It can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id")", or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public java.lang.String getParent() {
+      java.lang.Object ref = parent_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        parent_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. It can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id")", or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public com.google.protobuf.ByteString getParentBytes() {
+      java.lang.Object ref = parent_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        parent_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. It can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id")", or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParent(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. It can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id")", or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder clearParent() {
+
+      parent_ = getDefaultInstance().getParent();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. It can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id")", or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParentBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList assetNames_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
+
+    private void ensureAssetNamesIsMutable() {
+      if (!((bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = new com.google.protobuf.LazyStringArrayList(assetNames_);
+        bitField0_ |= 0x00000002;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public com.google.protobuf.ProtocolStringList getAssetNamesList() {
+      return assetNames_.getUnmodifiableView();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public int getAssetNamesCount() {
+      return assetNames_.size();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public java.lang.String getAssetNames(int index) {
+      return assetNames_.get(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public com.google.protobuf.ByteString getAssetNamesBytes(int index) {
+      return assetNames_.getByteString(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder setAssetNames(int index, java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetNamesIsMutable();
+      assetNames_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAssetNames(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetNamesIsMutable();
+      assetNames_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAllAssetNames(java.lang.Iterable<java.lang.String> values) {
+      ensureAssetNamesIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(values, assetNames_);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder clearAssetNames() {
+      assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000002);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets. For example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * and [Resource Name
+     * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+     * for more info.
+     * The request becomes a no-op if the asset name list is empty, and the max
+     * size of the asset name list is 100 in one request.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAssetNamesBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      ensureAssetNamesIsMutable();
+      assetNames_.add(value);
+      onChanged();
+      return this;
+    }
+
+    private int contentType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * Required. The content type.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+     */
+    public int getContentTypeValue() {
+      return contentType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The content type.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+     */
+    public Builder setContentTypeValue(int value) {
+      contentType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The content type.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.asset.v1p2beta1.ContentType result =
+          com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+      return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The content type.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+     */
+    public Builder setContentType(com.google.cloud.asset.v1p2beta1.ContentType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      contentType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The content type.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+     */
+    public Builder clearContentType() {
+
+      contentType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.TimeWindow readTimeWindow_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TimeWindow,
+            com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+            com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>
+        readTimeWindowBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public boolean hasReadTimeWindow() {
+      return readTimeWindowBuilder_ != null || readTimeWindow_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindow getReadTimeWindow() {
+      if (readTimeWindowBuilder_ == null) {
+        return readTimeWindow_ == null
+            ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+            : readTimeWindow_;
+      } else {
+        return readTimeWindowBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public Builder setReadTimeWindow(com.google.cloud.asset.v1p2beta1.TimeWindow value) {
+      if (readTimeWindowBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        readTimeWindow_ = value;
+        onChanged();
+      } else {
+        readTimeWindowBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public Builder setReadTimeWindow(
+        com.google.cloud.asset.v1p2beta1.TimeWindow.Builder builderForValue) {
+      if (readTimeWindowBuilder_ == null) {
+        readTimeWindow_ = builderForValue.build();
+        onChanged();
+      } else {
+        readTimeWindowBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public Builder mergeReadTimeWindow(com.google.cloud.asset.v1p2beta1.TimeWindow value) {
+      if (readTimeWindowBuilder_ == null) {
+        if (readTimeWindow_ != null) {
+          readTimeWindow_ =
+              com.google.cloud.asset.v1p2beta1.TimeWindow.newBuilder(readTimeWindow_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          readTimeWindow_ = value;
+        }
+        onChanged();
+      } else {
+        readTimeWindowBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public Builder clearReadTimeWindow() {
+      if (readTimeWindowBuilder_ == null) {
+        readTimeWindow_ = null;
+        onChanged();
+      } else {
+        readTimeWindow_ = null;
+        readTimeWindowBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindow.Builder getReadTimeWindowBuilder() {
+
+      onChanged();
+      return getReadTimeWindowFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getReadTimeWindowOrBuilder() {
+      if (readTimeWindowBuilder_ != null) {
+        return readTimeWindowBuilder_.getMessageOrBuilder();
+      } else {
+        return readTimeWindow_ == null
+            ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+            : readTimeWindow_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Optional. The time window for the asset history. Both start_time and
+     * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+     * end_time is not set, it is default to current timestamp. If start_time is
+     * not set, the snapshot of the assets at end_time will be returned. The
+     * returned results contain all temporal assets whose time window overlap with
+     * read_time_window.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TimeWindow,
+            com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+            com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>
+        getReadTimeWindowFieldBuilder() {
+      if (readTimeWindowBuilder_ == null) {
+        readTimeWindowBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.TimeWindow,
+                com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+                com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>(
+                getReadTimeWindow(), getParentForChildren(), isClean());
+        readTimeWindow_ = null;
+      }
+      return readTimeWindowBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+  private static final com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest
+      DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<BatchGetAssetsHistoryRequest> PARSER =
+      new com.google.protobuf.AbstractParser<BatchGetAssetsHistoryRequest>() {
+        @java.lang.Override
+        public BatchGetAssetsHistoryRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new BatchGetAssetsHistoryRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<BatchGetAssetsHistoryRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<BatchGetAssetsHistoryRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequestOrBuilder.java
new file mode 100644
index 000000000000..54ab82467410
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryRequestOrBuilder.java
@@ -0,0 +1,175 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface BatchGetAssetsHistoryRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. It can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id")", or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  java.lang.String getParent();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. It can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id")", or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  com.google.protobuf.ByteString getParentBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  java.util.List<java.lang.String> getAssetNamesList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  int getAssetNamesCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  java.lang.String getAssetNames(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets. For example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * and [Resource Name
+   * Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+   * for more info.
+   * The request becomes a no-op if the asset name list is empty, and the max
+   * size of the asset name list is 100 in one request.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  com.google.protobuf.ByteString getAssetNamesBytes(int index);
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The content type.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+   */
+  int getContentTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The content type.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.ContentType getContentType();
+
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  boolean hasReadTimeWindow();
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TimeWindow getReadTimeWindow();
+  /**
+   *
+   *
+   * <pre>
+   * Optional. The time window for the asset history. Both start_time and
+   * end_time are optional and if set, it must be after 2018-10-02 UTC. If
+   * end_time is not set, it is default to current timestamp. If start_time is
+   * not set, the snapshot of the assets at end_time will be returned. The
+   * returned results contain all temporal assets whose time window overlap with
+   * read_time_window.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow read_time_window = 4;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getReadTimeWindowOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponse.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponse.java
new file mode 100644
index 000000000000..69866eab8744
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponse.java
@@ -0,0 +1,931 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Batch get assets history response.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse}
+ */
+public final class BatchGetAssetsHistoryResponse extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+    BatchGetAssetsHistoryResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use BatchGetAssetsHistoryResponse.newBuilder() to construct.
+  private BatchGetAssetsHistoryResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private BatchGetAssetsHistoryResponse() {
+    assets_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private BatchGetAssetsHistoryResponse(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                assets_ = new java.util.ArrayList<com.google.cloud.asset.v1p2beta1.TemporalAsset>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              assets_.add(
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.TemporalAsset.parser(), extensionRegistry));
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        assets_ = java.util.Collections.unmodifiableList(assets_);
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.class,
+            com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.Builder.class);
+  }
+
+  public static final int ASSETS_FIELD_NUMBER = 1;
+  private java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset> assets_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  public java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset> getAssetsList() {
+    return assets_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  public java.util.List<? extends com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>
+      getAssetsOrBuilderList() {
+    return assets_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  public int getAssetsCount() {
+    return assets_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TemporalAsset getAssets(int index) {
+    return assets_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder getAssetsOrBuilder(int index) {
+    return assets_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    for (int i = 0; i < assets_.size(); i++) {
+      output.writeMessage(1, assets_.get(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    for (int i = 0; i < assets_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, assets_.get(i));
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse other =
+        (com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse) obj;
+
+    if (!getAssetsList().equals(other.getAssetsList())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getAssetsCount() > 0) {
+      hash = (37 * hash) + ASSETS_FIELD_NUMBER;
+      hash = (53 * hash) + getAssetsList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Batch get assets history response.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.class,
+              com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+        getAssetsFieldBuilder();
+      }
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (assetsBuilder_ == null) {
+        assets_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      } else {
+        assetsBuilder_.clear();
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BatchGetAssetsHistoryResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse
+        getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse build() {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse buildPartial() {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse result =
+          new com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse(this);
+      int from_bitField0_ = bitField0_;
+      if (assetsBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          assets_ = java.util.Collections.unmodifiableList(assets_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.assets_ = assets_;
+      } else {
+        result.assets_ = assetsBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse other) {
+      if (other
+          == com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse.getDefaultInstance())
+        return this;
+      if (assetsBuilder_ == null) {
+        if (!other.assets_.isEmpty()) {
+          if (assets_.isEmpty()) {
+            assets_ = other.assets_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureAssetsIsMutable();
+            assets_.addAll(other.assets_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.assets_.isEmpty()) {
+          if (assetsBuilder_.isEmpty()) {
+            assetsBuilder_.dispose();
+            assetsBuilder_ = null;
+            assets_ = other.assets_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            assetsBuilder_ =
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
+                    ? getAssetsFieldBuilder()
+                    : null;
+          } else {
+            assetsBuilder_.addAllMessages(other.assets_);
+          }
+        }
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+                e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset> assets_ =
+        java.util.Collections.emptyList();
+
+    private void ensureAssetsIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        assets_ = new java.util.ArrayList<com.google.cloud.asset.v1p2beta1.TemporalAsset>(assets_);
+        bitField0_ |= 0x00000001;
+      }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TemporalAsset,
+            com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder,
+            com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>
+        assetsBuilder_;
+
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset> getAssetsList() {
+      if (assetsBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(assets_);
+      } else {
+        return assetsBuilder_.getMessageList();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public int getAssetsCount() {
+      if (assetsBuilder_ == null) {
+        return assets_.size();
+      } else {
+        return assetsBuilder_.getCount();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset getAssets(int index) {
+      if (assetsBuilder_ == null) {
+        return assets_.get(index);
+      } else {
+        return assetsBuilder_.getMessage(index);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder setAssets(int index, com.google.cloud.asset.v1p2beta1.TemporalAsset value) {
+      if (assetsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureAssetsIsMutable();
+        assets_.set(index, value);
+        onChanged();
+      } else {
+        assetsBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder setAssets(
+        int index, com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder builderForValue) {
+      if (assetsBuilder_ == null) {
+        ensureAssetsIsMutable();
+        assets_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        assetsBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder addAssets(com.google.cloud.asset.v1p2beta1.TemporalAsset value) {
+      if (assetsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureAssetsIsMutable();
+        assets_.add(value);
+        onChanged();
+      } else {
+        assetsBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder addAssets(int index, com.google.cloud.asset.v1p2beta1.TemporalAsset value) {
+      if (assetsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureAssetsIsMutable();
+        assets_.add(index, value);
+        onChanged();
+      } else {
+        assetsBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder addAssets(
+        com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder builderForValue) {
+      if (assetsBuilder_ == null) {
+        ensureAssetsIsMutable();
+        assets_.add(builderForValue.build());
+        onChanged();
+      } else {
+        assetsBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder addAssets(
+        int index, com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder builderForValue) {
+      if (assetsBuilder_ == null) {
+        ensureAssetsIsMutable();
+        assets_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        assetsBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder addAllAssets(
+        java.lang.Iterable<? extends com.google.cloud.asset.v1p2beta1.TemporalAsset> values) {
+      if (assetsBuilder_ == null) {
+        ensureAssetsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, assets_);
+        onChanged();
+      } else {
+        assetsBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder clearAssets() {
+      if (assetsBuilder_ == null) {
+        assets_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        assetsBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public Builder removeAssets(int index) {
+      if (assetsBuilder_ == null) {
+        ensureAssetsIsMutable();
+        assets_.remove(index);
+        onChanged();
+      } else {
+        assetsBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder getAssetsBuilder(int index) {
+      return getAssetsFieldBuilder().getBuilder(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder getAssetsOrBuilder(int index) {
+      if (assetsBuilder_ == null) {
+        return assets_.get(index);
+      } else {
+        return assetsBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public java.util.List<? extends com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>
+        getAssetsOrBuilderList() {
+      if (assetsBuilder_ != null) {
+        return assetsBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(assets_);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder addAssetsBuilder() {
+      return getAssetsFieldBuilder()
+          .addBuilder(com.google.cloud.asset.v1p2beta1.TemporalAsset.getDefaultInstance());
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder addAssetsBuilder(int index) {
+      return getAssetsFieldBuilder()
+          .addBuilder(index, com.google.cloud.asset.v1p2beta1.TemporalAsset.getDefaultInstance());
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of assets with valid time windows.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+     */
+    public java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder>
+        getAssetsBuilderList() {
+      return getAssetsFieldBuilder().getBuilderList();
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TemporalAsset,
+            com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder,
+            com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>
+        getAssetsFieldBuilder() {
+      if (assetsBuilder_ == null) {
+        assetsBuilder_ =
+            new com.google.protobuf.RepeatedFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.TemporalAsset,
+                com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder,
+                com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>(
+                assets_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+        assets_ = null;
+      }
+      return assetsBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+  private static final com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse
+      DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse
+      getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<BatchGetAssetsHistoryResponse> PARSER =
+      new com.google.protobuf.AbstractParser<BatchGetAssetsHistoryResponse>() {
+        @java.lang.Override
+        public BatchGetAssetsHistoryResponse parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new BatchGetAssetsHistoryResponse(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<BatchGetAssetsHistoryResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<BatchGetAssetsHistoryResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse
+      getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponseOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponseOrBuilder.java
new file mode 100644
index 000000000000..04d1bddddccc
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BatchGetAssetsHistoryResponseOrBuilder.java
@@ -0,0 +1,62 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface BatchGetAssetsHistoryResponseOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  java.util.List<com.google.cloud.asset.v1p2beta1.TemporalAsset> getAssetsList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TemporalAsset getAssets(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  int getAssetsCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  java.util.List<? extends com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder>
+      getAssetsOrBuilderList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of assets with valid time windows.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.TemporalAsset assets = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder getAssetsOrBuilder(int index);
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestination.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestination.java
new file mode 100644
index 000000000000..19b217df2735
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestination.java
@@ -0,0 +1,885 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * A Bigquery destination.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.BigQueryDestination}
+ */
+public final class BigQueryDestination extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.BigQueryDestination)
+    BigQueryDestinationOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use BigQueryDestination.newBuilder() to construct.
+  private BigQueryDestination(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private BigQueryDestination() {
+    dataset_ = "";
+    table_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private BigQueryDestination(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dataset_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              table_ = s;
+              break;
+            }
+          case 24:
+            {
+              force_ = input.readBool();
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination.class,
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder.class);
+  }
+
+  public static final int DATASET_FIELD_NUMBER = 1;
+  private volatile java.lang.Object dataset_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery dataset in format
+   * "projects/projectId/datasets/datasetId", to which the snapshot result
+   * should be exported. If this dataset does not exist, the export call returns
+   * an error.
+   * </pre>
+   *
+   * <code>string dataset = 1;</code>
+   */
+  public java.lang.String getDataset() {
+    java.lang.Object ref = dataset_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      dataset_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery dataset in format
+   * "projects/projectId/datasets/datasetId", to which the snapshot result
+   * should be exported. If this dataset does not exist, the export call returns
+   * an error.
+   * </pre>
+   *
+   * <code>string dataset = 1;</code>
+   */
+  public com.google.protobuf.ByteString getDatasetBytes() {
+    java.lang.Object ref = dataset_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      dataset_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int TABLE_FIELD_NUMBER = 2;
+  private volatile java.lang.Object table_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery table to which the snapshot result should be
+   * written. If this table does not exist, a new table with the given name
+   * will be created.
+   * </pre>
+   *
+   * <code>string table = 2;</code>
+   */
+  public java.lang.String getTable() {
+    java.lang.Object ref = table_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      table_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery table to which the snapshot result should be
+   * written. If this table does not exist, a new table with the given name
+   * will be created.
+   * </pre>
+   *
+   * <code>string table = 2;</code>
+   */
+  public com.google.protobuf.ByteString getTableBytes() {
+    java.lang.Object ref = table_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      table_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int FORCE_FIELD_NUMBER = 3;
+  private boolean force_;
+  /**
+   *
+   *
+   * <pre>
+   * If the destination table already exists and this flag is `TRUE`, the
+   * table will be overwritten by the contents of assets snapshot. If the flag
+   * is not set and the destination table already exists, the export call
+   * returns an error.
+   * </pre>
+   *
+   * <code>bool force = 3;</code>
+   */
+  public boolean getForce() {
+    return force_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getDatasetBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, dataset_);
+    }
+    if (!getTableBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, table_);
+    }
+    if (force_ != false) {
+      output.writeBool(3, force_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getDatasetBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, dataset_);
+    }
+    if (!getTableBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, table_);
+    }
+    if (force_ != false) {
+      size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, force_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.BigQueryDestination)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.BigQueryDestination other =
+        (com.google.cloud.asset.v1p2beta1.BigQueryDestination) obj;
+
+    if (!getDataset().equals(other.getDataset())) return false;
+    if (!getTable().equals(other.getTable())) return false;
+    if (getForce() != other.getForce()) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + DATASET_FIELD_NUMBER;
+    hash = (53 * hash) + getDataset().hashCode();
+    hash = (37 * hash) + TABLE_FIELD_NUMBER;
+    hash = (53 * hash) + getTable().hashCode();
+    hash = (37 * hash) + FORCE_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getForce());
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.BigQueryDestination prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A Bigquery destination.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.BigQueryDestination}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.BigQueryDestination)
+      com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.BigQueryDestination.class,
+              com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.BigQueryDestination.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      dataset_ = "";
+
+      table_ = "";
+
+      force_ = false;
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_BigQueryDestination_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestination getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestination build() {
+      com.google.cloud.asset.v1p2beta1.BigQueryDestination result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestination buildPartial() {
+      com.google.cloud.asset.v1p2beta1.BigQueryDestination result =
+          new com.google.cloud.asset.v1p2beta1.BigQueryDestination(this);
+      result.dataset_ = dataset_;
+      result.table_ = table_;
+      result.force_ = force_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.BigQueryDestination) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.BigQueryDestination) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.BigQueryDestination other) {
+      if (other == com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance())
+        return this;
+      if (!other.getDataset().isEmpty()) {
+        dataset_ = other.dataset_;
+        onChanged();
+      }
+      if (!other.getTable().isEmpty()) {
+        table_ = other.table_;
+        onChanged();
+      }
+      if (other.getForce() != false) {
+        setForce(other.getForce());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.BigQueryDestination parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.BigQueryDestination) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object dataset_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery dataset in format
+     * "projects/projectId/datasets/datasetId", to which the snapshot result
+     * should be exported. If this dataset does not exist, the export call returns
+     * an error.
+     * </pre>
+     *
+     * <code>string dataset = 1;</code>
+     */
+    public java.lang.String getDataset() {
+      java.lang.Object ref = dataset_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dataset_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery dataset in format
+     * "projects/projectId/datasets/datasetId", to which the snapshot result
+     * should be exported. If this dataset does not exist, the export call returns
+     * an error.
+     * </pre>
+     *
+     * <code>string dataset = 1;</code>
+     */
+    public com.google.protobuf.ByteString getDatasetBytes() {
+      java.lang.Object ref = dataset_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        dataset_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery dataset in format
+     * "projects/projectId/datasets/datasetId", to which the snapshot result
+     * should be exported. If this dataset does not exist, the export call returns
+     * an error.
+     * </pre>
+     *
+     * <code>string dataset = 1;</code>
+     */
+    public Builder setDataset(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      dataset_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery dataset in format
+     * "projects/projectId/datasets/datasetId", to which the snapshot result
+     * should be exported. If this dataset does not exist, the export call returns
+     * an error.
+     * </pre>
+     *
+     * <code>string dataset = 1;</code>
+     */
+    public Builder clearDataset() {
+
+      dataset_ = getDefaultInstance().getDataset();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery dataset in format
+     * "projects/projectId/datasets/datasetId", to which the snapshot result
+     * should be exported. If this dataset does not exist, the export call returns
+     * an error.
+     * </pre>
+     *
+     * <code>string dataset = 1;</code>
+     */
+    public Builder setDatasetBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      dataset_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object table_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery table to which the snapshot result should be
+     * written. If this table does not exist, a new table with the given name
+     * will be created.
+     * </pre>
+     *
+     * <code>string table = 2;</code>
+     */
+    public java.lang.String getTable() {
+      java.lang.Object ref = table_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        table_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery table to which the snapshot result should be
+     * written. If this table does not exist, a new table with the given name
+     * will be created.
+     * </pre>
+     *
+     * <code>string table = 2;</code>
+     */
+    public com.google.protobuf.ByteString getTableBytes() {
+      java.lang.Object ref = table_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        table_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery table to which the snapshot result should be
+     * written. If this table does not exist, a new table with the given name
+     * will be created.
+     * </pre>
+     *
+     * <code>string table = 2;</code>
+     */
+    public Builder setTable(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      table_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery table to which the snapshot result should be
+     * written. If this table does not exist, a new table with the given name
+     * will be created.
+     * </pre>
+     *
+     * <code>string table = 2;</code>
+     */
+    public Builder clearTable() {
+
+      table_ = getDefaultInstance().getTable();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The BigQuery table to which the snapshot result should be
+     * written. If this table does not exist, a new table with the given name
+     * will be created.
+     * </pre>
+     *
+     * <code>string table = 2;</code>
+     */
+    public Builder setTableBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      table_ = value;
+      onChanged();
+      return this;
+    }
+
+    private boolean force_;
+    /**
+     *
+     *
+     * <pre>
+     * If the destination table already exists and this flag is `TRUE`, the
+     * table will be overwritten by the contents of assets snapshot. If the flag
+     * is not set and the destination table already exists, the export call
+     * returns an error.
+     * </pre>
+     *
+     * <code>bool force = 3;</code>
+     */
+    public boolean getForce() {
+      return force_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * If the destination table already exists and this flag is `TRUE`, the
+     * table will be overwritten by the contents of assets snapshot. If the flag
+     * is not set and the destination table already exists, the export call
+     * returns an error.
+     * </pre>
+     *
+     * <code>bool force = 3;</code>
+     */
+    public Builder setForce(boolean value) {
+
+      force_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * If the destination table already exists and this flag is `TRUE`, the
+     * table will be overwritten by the contents of assets snapshot. If the flag
+     * is not set and the destination table already exists, the export call
+     * returns an error.
+     * </pre>
+     *
+     * <code>bool force = 3;</code>
+     */
+    public Builder clearForce() {
+
+      force_ = false;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.BigQueryDestination)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.BigQueryDestination)
+  private static final com.google.cloud.asset.v1p2beta1.BigQueryDestination DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.BigQueryDestination();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.BigQueryDestination getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<BigQueryDestination> PARSER =
+      new com.google.protobuf.AbstractParser<BigQueryDestination>() {
+        @java.lang.Override
+        public BigQueryDestination parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new BigQueryDestination(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<BigQueryDestination> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<BigQueryDestination> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.BigQueryDestination getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestinationOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestinationOrBuilder.java
new file mode 100644
index 000000000000..c91e8eb4258e
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/BigQueryDestinationOrBuilder.java
@@ -0,0 +1,76 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface BigQueryDestinationOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.BigQueryDestination)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery dataset in format
+   * "projects/projectId/datasets/datasetId", to which the snapshot result
+   * should be exported. If this dataset does not exist, the export call returns
+   * an error.
+   * </pre>
+   *
+   * <code>string dataset = 1;</code>
+   */
+  java.lang.String getDataset();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery dataset in format
+   * "projects/projectId/datasets/datasetId", to which the snapshot result
+   * should be exported. If this dataset does not exist, the export call returns
+   * an error.
+   * </pre>
+   *
+   * <code>string dataset = 1;</code>
+   */
+  com.google.protobuf.ByteString getDatasetBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery table to which the snapshot result should be
+   * written. If this table does not exist, a new table with the given name
+   * will be created.
+   * </pre>
+   *
+   * <code>string table = 2;</code>
+   */
+  java.lang.String getTable();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The BigQuery table to which the snapshot result should be
+   * written. If this table does not exist, a new table with the given name
+   * will be created.
+   * </pre>
+   *
+   * <code>string table = 2;</code>
+   */
+  com.google.protobuf.ByteString getTableBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * If the destination table already exists and this flag is `TRUE`, the
+   * table will be overwritten by the contents of assets snapshot. If the flag
+   * is not set and the destination table already exists, the export call
+   * returns an error.
+   * </pre>
+   *
+   * <code>bool force = 3;</code>
+   */
+  boolean getForce();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ContentType.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ContentType.java
new file mode 100644
index 000000000000..7ad8325cce2d
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ContentType.java
@@ -0,0 +1,199 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Asset content type.
+ * </pre>
+ *
+ * Protobuf enum {@code google.cloud.asset.v1p2beta1.ContentType}
+ */
+public enum ContentType implements com.google.protobuf.ProtocolMessageEnum {
+  /**
+   *
+   *
+   * <pre>
+   * Unspecified content type.
+   * </pre>
+   *
+   * <code>CONTENT_TYPE_UNSPECIFIED = 0;</code>
+   */
+  CONTENT_TYPE_UNSPECIFIED(0),
+  /**
+   *
+   *
+   * <pre>
+   * Resource metadata.
+   * </pre>
+   *
+   * <code>RESOURCE = 1;</code>
+   */
+  RESOURCE(1),
+  /**
+   *
+   *
+   * <pre>
+   * The actual IAM policy set on a resource.
+   * </pre>
+   *
+   * <code>IAM_POLICY = 2;</code>
+   */
+  IAM_POLICY(2),
+  /**
+   *
+   *
+   * <pre>
+   * The IAM policy name for the IAM policy set on a resource.
+   * </pre>
+   *
+   * <code>IAM_POLICY_NAME = 3;</code>
+   */
+  IAM_POLICY_NAME(3),
+  /** <code>ORG_POLICY = 4;</code> */
+  ORG_POLICY(4),
+  /**
+   *
+   *
+   * <pre>
+   * The Cloud Access context mananger Policy set on an asset.
+   * </pre>
+   *
+   * <code>ACCESS_POLICY = 5;</code>
+   */
+  ACCESS_POLICY(5),
+  UNRECOGNIZED(-1),
+  ;
+
+  /**
+   *
+   *
+   * <pre>
+   * Unspecified content type.
+   * </pre>
+   *
+   * <code>CONTENT_TYPE_UNSPECIFIED = 0;</code>
+   */
+  public static final int CONTENT_TYPE_UNSPECIFIED_VALUE = 0;
+  /**
+   *
+   *
+   * <pre>
+   * Resource metadata.
+   * </pre>
+   *
+   * <code>RESOURCE = 1;</code>
+   */
+  public static final int RESOURCE_VALUE = 1;
+  /**
+   *
+   *
+   * <pre>
+   * The actual IAM policy set on a resource.
+   * </pre>
+   *
+   * <code>IAM_POLICY = 2;</code>
+   */
+  public static final int IAM_POLICY_VALUE = 2;
+  /**
+   *
+   *
+   * <pre>
+   * The IAM policy name for the IAM policy set on a resource.
+   * </pre>
+   *
+   * <code>IAM_POLICY_NAME = 3;</code>
+   */
+  public static final int IAM_POLICY_NAME_VALUE = 3;
+  /** <code>ORG_POLICY = 4;</code> */
+  public static final int ORG_POLICY_VALUE = 4;
+  /**
+   *
+   *
+   * <pre>
+   * The Cloud Access context mananger Policy set on an asset.
+   * </pre>
+   *
+   * <code>ACCESS_POLICY = 5;</code>
+   */
+  public static final int ACCESS_POLICY_VALUE = 5;
+
+  public final int getNumber() {
+    if (this == UNRECOGNIZED) {
+      throw new java.lang.IllegalArgumentException(
+          "Can't get the number of an unknown enum value.");
+    }
+    return value;
+  }
+
+  /** @deprecated Use {@link #forNumber(int)} instead. */
+  @java.lang.Deprecated
+  public static ContentType valueOf(int value) {
+    return forNumber(value);
+  }
+
+  public static ContentType forNumber(int value) {
+    switch (value) {
+      case 0:
+        return CONTENT_TYPE_UNSPECIFIED;
+      case 1:
+        return RESOURCE;
+      case 2:
+        return IAM_POLICY;
+      case 3:
+        return IAM_POLICY_NAME;
+      case 4:
+        return ORG_POLICY;
+      case 5:
+        return ACCESS_POLICY;
+      default:
+        return null;
+    }
+  }
+
+  public static com.google.protobuf.Internal.EnumLiteMap<ContentType> internalGetValueMap() {
+    return internalValueMap;
+  }
+
+  private static final com.google.protobuf.Internal.EnumLiteMap<ContentType> internalValueMap =
+      new com.google.protobuf.Internal.EnumLiteMap<ContentType>() {
+        public ContentType findValueByNumber(int number) {
+          return ContentType.forNumber(number);
+        }
+      };
+
+  public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+    return getDescriptor().getValues().get(ordinal());
+  }
+
+  public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+    return getDescriptor();
+  }
+
+  public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto.getDescriptor().getEnumTypes().get(0);
+  }
+
+  private static final ContentType[] VALUES = values();
+
+  public static ContentType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+    if (desc.getType() != getDescriptor()) {
+      throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+    }
+    if (desc.getIndex() == -1) {
+      return UNRECOGNIZED;
+    }
+    return VALUES[desc.getIndex()];
+  }
+
+  private final int value;
+
+  private ContentType(int value) {
+    this.value = value;
+  }
+
+  // @@protoc_insertion_point(enum_scope:google.cloud.asset.v1p2beta1.ContentType)
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequest.java
new file mode 100644
index 000000000000..5b83c2cc6dde
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequest.java
@@ -0,0 +1,1102 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Create asset feed request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.CreateFeedRequest}
+ */
+public final class CreateFeedRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.CreateFeedRequest)
+    CreateFeedRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use CreateFeedRequest.newBuilder() to construct.
+  private CreateFeedRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private CreateFeedRequest() {
+    parent_ = "";
+    feedId_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private CreateFeedRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              parent_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              feedId_ = s;
+              break;
+            }
+          case 26:
+            {
+              com.google.cloud.asset.v1p2beta1.Feed.Builder subBuilder = null;
+              if (feed_ != null) {
+                subBuilder = feed_.toBuilder();
+              }
+              feed_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.Feed.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(feed_);
+                feed_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.CreateFeedRequest.class,
+            com.google.cloud.asset.v1p2beta1.CreateFeedRequest.Builder.class);
+  }
+
+  public static final int PARENT_FIELD_NUMBER = 1;
+  private volatile java.lang.Object parent_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The name of the project/folder/organization where this feed
+   * should be created in. It can only be an organization number (such as
+   * "organizations/123"), a folder number (such as "folders/123"), a project ID
+   * (such as "projects/my-project-id")", or a project number (such as
+   * "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public java.lang.String getParent() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      parent_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The name of the project/folder/organization where this feed
+   * should be created in. It can only be an organization number (such as
+   * "organizations/123"), a folder number (such as "folders/123"), a project ID
+   * (such as "projects/my-project-id")", or a project number (such as
+   * "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public com.google.protobuf.ByteString getParentBytes() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      parent_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int FEED_ID_FIELD_NUMBER = 2;
+  private volatile java.lang.Object feedId_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. This is the client-assigned asset feed identifier and it needs to
+   * be unique under a specific parent project/folder/organization.
+   * </pre>
+   *
+   * <code>string feed_id = 2;</code>
+   */
+  public java.lang.String getFeedId() {
+    java.lang.Object ref = feedId_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      feedId_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. This is the client-assigned asset feed identifier and it needs to
+   * be unique under a specific parent project/folder/organization.
+   * </pre>
+   *
+   * <code>string feed_id = 2;</code>
+   */
+  public com.google.protobuf.ByteString getFeedIdBytes() {
+    java.lang.Object ref = feedId_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      feedId_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int FEED_FIELD_NUMBER = 3;
+  private com.google.cloud.asset.v1p2beta1.Feed feed_;
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  public boolean hasFeed() {
+    return feed_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.Feed getFeed() {
+    return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder() {
+    return getFeed();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getParentBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_);
+    }
+    if (!getFeedIdBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, feedId_);
+    }
+    if (feed_ != null) {
+      output.writeMessage(3, getFeed());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getParentBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_);
+    }
+    if (!getFeedIdBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, feedId_);
+    }
+    if (feed_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getFeed());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.CreateFeedRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.CreateFeedRequest other =
+        (com.google.cloud.asset.v1p2beta1.CreateFeedRequest) obj;
+
+    if (!getParent().equals(other.getParent())) return false;
+    if (!getFeedId().equals(other.getFeedId())) return false;
+    if (hasFeed() != other.hasFeed()) return false;
+    if (hasFeed()) {
+      if (!getFeed().equals(other.getFeed())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + PARENT_FIELD_NUMBER;
+    hash = (53 * hash) + getParent().hashCode();
+    hash = (37 * hash) + FEED_ID_FIELD_NUMBER;
+    hash = (53 * hash) + getFeedId().hashCode();
+    if (hasFeed()) {
+      hash = (37 * hash) + FEED_FIELD_NUMBER;
+      hash = (53 * hash) + getFeed().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.CreateFeedRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Create asset feed request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.CreateFeedRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.CreateFeedRequest)
+      com.google.cloud.asset.v1p2beta1.CreateFeedRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.CreateFeedRequest.class,
+              com.google.cloud.asset.v1p2beta1.CreateFeedRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.CreateFeedRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      parent_ = "";
+
+      feedId_ = "";
+
+      if (feedBuilder_ == null) {
+        feed_ = null;
+      } else {
+        feed_ = null;
+        feedBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_CreateFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.CreateFeedRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.CreateFeedRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.CreateFeedRequest build() {
+      com.google.cloud.asset.v1p2beta1.CreateFeedRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.CreateFeedRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.CreateFeedRequest result =
+          new com.google.cloud.asset.v1p2beta1.CreateFeedRequest(this);
+      result.parent_ = parent_;
+      result.feedId_ = feedId_;
+      if (feedBuilder_ == null) {
+        result.feed_ = feed_;
+      } else {
+        result.feed_ = feedBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.CreateFeedRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.CreateFeedRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.CreateFeedRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.CreateFeedRequest.getDefaultInstance())
+        return this;
+      if (!other.getParent().isEmpty()) {
+        parent_ = other.parent_;
+        onChanged();
+      }
+      if (!other.getFeedId().isEmpty()) {
+        feedId_ = other.feedId_;
+        onChanged();
+      }
+      if (other.hasFeed()) {
+        mergeFeed(other.getFeed());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.CreateFeedRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.CreateFeedRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object parent_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The name of the project/folder/organization where this feed
+     * should be created in. It can only be an organization number (such as
+     * "organizations/123"), a folder number (such as "folders/123"), a project ID
+     * (such as "projects/my-project-id")", or a project number (such as
+     * "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public java.lang.String getParent() {
+      java.lang.Object ref = parent_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        parent_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The name of the project/folder/organization where this feed
+     * should be created in. It can only be an organization number (such as
+     * "organizations/123"), a folder number (such as "folders/123"), a project ID
+     * (such as "projects/my-project-id")", or a project number (such as
+     * "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public com.google.protobuf.ByteString getParentBytes() {
+      java.lang.Object ref = parent_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        parent_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The name of the project/folder/organization where this feed
+     * should be created in. It can only be an organization number (such as
+     * "organizations/123"), a folder number (such as "folders/123"), a project ID
+     * (such as "projects/my-project-id")", or a project number (such as
+     * "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParent(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The name of the project/folder/organization where this feed
+     * should be created in. It can only be an organization number (such as
+     * "organizations/123"), a folder number (such as "folders/123"), a project ID
+     * (such as "projects/my-project-id")", or a project number (such as
+     * "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder clearParent() {
+
+      parent_ = getDefaultInstance().getParent();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The name of the project/folder/organization where this feed
+     * should be created in. It can only be an organization number (such as
+     * "organizations/123"), a folder number (such as "folders/123"), a project ID
+     * (such as "projects/my-project-id")", or a project number (such as
+     * "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParentBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object feedId_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. This is the client-assigned asset feed identifier and it needs to
+     * be unique under a specific parent project/folder/organization.
+     * </pre>
+     *
+     * <code>string feed_id = 2;</code>
+     */
+    public java.lang.String getFeedId() {
+      java.lang.Object ref = feedId_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        feedId_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. This is the client-assigned asset feed identifier and it needs to
+     * be unique under a specific parent project/folder/organization.
+     * </pre>
+     *
+     * <code>string feed_id = 2;</code>
+     */
+    public com.google.protobuf.ByteString getFeedIdBytes() {
+      java.lang.Object ref = feedId_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        feedId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. This is the client-assigned asset feed identifier and it needs to
+     * be unique under a specific parent project/folder/organization.
+     * </pre>
+     *
+     * <code>string feed_id = 2;</code>
+     */
+    public Builder setFeedId(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      feedId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. This is the client-assigned asset feed identifier and it needs to
+     * be unique under a specific parent project/folder/organization.
+     * </pre>
+     *
+     * <code>string feed_id = 2;</code>
+     */
+    public Builder clearFeedId() {
+
+      feedId_ = getDefaultInstance().getFeedId();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. This is the client-assigned asset feed identifier and it needs to
+     * be unique under a specific parent project/folder/organization.
+     * </pre>
+     *
+     * <code>string feed_id = 2;</code>
+     */
+    public Builder setFeedIdBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      feedId_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.Feed feed_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        feedBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public boolean hasFeed() {
+      return feedBuilder_ != null || feed_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed getFeed() {
+      if (feedBuilder_ == null) {
+        return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+      } else {
+        return feedBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public Builder setFeed(com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        feed_ = value;
+        onChanged();
+      } else {
+        feedBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public Builder setFeed(com.google.cloud.asset.v1p2beta1.Feed.Builder builderForValue) {
+      if (feedBuilder_ == null) {
+        feed_ = builderForValue.build();
+        onChanged();
+      } else {
+        feedBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public Builder mergeFeed(com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedBuilder_ == null) {
+        if (feed_ != null) {
+          feed_ =
+              com.google.cloud.asset.v1p2beta1.Feed.newBuilder(feed_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          feed_ = value;
+        }
+        onChanged();
+      } else {
+        feedBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public Builder clearFeed() {
+      if (feedBuilder_ == null) {
+        feed_ = null;
+        onChanged();
+      } else {
+        feed_ = null;
+        feedBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed.Builder getFeedBuilder() {
+
+      onChanged();
+      return getFeedFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder() {
+      if (feedBuilder_ != null) {
+        return feedBuilder_.getMessageOrBuilder();
+      } else {
+        return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The feed details. The field `name` must be empty and it will be generated
+     * in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        getFeedFieldBuilder() {
+      if (feedBuilder_ == null) {
+        feedBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.Feed,
+                com.google.cloud.asset.v1p2beta1.Feed.Builder,
+                com.google.cloud.asset.v1p2beta1.FeedOrBuilder>(
+                getFeed(), getParentForChildren(), isClean());
+        feed_ = null;
+      }
+      return feedBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.CreateFeedRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.CreateFeedRequest)
+  private static final com.google.cloud.asset.v1p2beta1.CreateFeedRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.CreateFeedRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.CreateFeedRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<CreateFeedRequest> PARSER =
+      new com.google.protobuf.AbstractParser<CreateFeedRequest>() {
+        @java.lang.Override
+        public CreateFeedRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new CreateFeedRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<CreateFeedRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<CreateFeedRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.CreateFeedRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequestOrBuilder.java
new file mode 100644
index 000000000000..bc4a6544d1ca
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/CreateFeedRequestOrBuilder.java
@@ -0,0 +1,105 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface CreateFeedRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.CreateFeedRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The name of the project/folder/organization where this feed
+   * should be created in. It can only be an organization number (such as
+   * "organizations/123"), a folder number (such as "folders/123"), a project ID
+   * (such as "projects/my-project-id")", or a project number (such as
+   * "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  java.lang.String getParent();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The name of the project/folder/organization where this feed
+   * should be created in. It can only be an organization number (such as
+   * "organizations/123"), a folder number (such as "folders/123"), a project ID
+   * (such as "projects/my-project-id")", or a project number (such as
+   * "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  com.google.protobuf.ByteString getParentBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. This is the client-assigned asset feed identifier and it needs to
+   * be unique under a specific parent project/folder/organization.
+   * </pre>
+   *
+   * <code>string feed_id = 2;</code>
+   */
+  java.lang.String getFeedId();
+  /**
+   *
+   *
+   * <pre>
+   * Required. This is the client-assigned asset feed identifier and it needs to
+   * be unique under a specific parent project/folder/organization.
+   * </pre>
+   *
+   * <code>string feed_id = 2;</code>
+   */
+  com.google.protobuf.ByteString getFeedIdBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  boolean hasFeed();
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.Feed getFeed();
+  /**
+   *
+   *
+   * <pre>
+   * The feed details. The field `name` must be empty and it will be generated
+   * in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequest.java
new file mode 100644
index 000000000000..0e3d67b52a0b
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequest.java
@@ -0,0 +1,619 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Delete asset feed request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.DeleteFeedRequest}
+ */
+public final class DeleteFeedRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.DeleteFeedRequest)
+    DeleteFeedRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use DeleteFeedRequest.newBuilder() to construct.
+  private DeleteFeedRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private DeleteFeedRequest() {
+    name_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private DeleteFeedRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.class,
+            com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.Builder.class);
+  }
+
+  public static final int NAME_FIELD_NUMBER = 1;
+  private volatile java.lang.Object name_;
+  /**
+   *
+   *
+   * <pre>
+   * The name of the feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public java.lang.String getName() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      name_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The name of the feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public com.google.protobuf.ByteString getNameBytes() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      name_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.DeleteFeedRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.DeleteFeedRequest other =
+        (com.google.cloud.asset.v1p2beta1.DeleteFeedRequest) obj;
+
+    if (!getName().equals(other.getName())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getName().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.DeleteFeedRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Delete asset feed request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.DeleteFeedRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.DeleteFeedRequest)
+      com.google.cloud.asset.v1p2beta1.DeleteFeedRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.class,
+              com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      name_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_DeleteFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.DeleteFeedRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.DeleteFeedRequest build() {
+      com.google.cloud.asset.v1p2beta1.DeleteFeedRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.DeleteFeedRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.DeleteFeedRequest result =
+          new com.google.cloud.asset.v1p2beta1.DeleteFeedRequest(this);
+      result.name_ = name_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.DeleteFeedRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.DeleteFeedRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.DeleteFeedRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.DeleteFeedRequest.getDefaultInstance())
+        return this;
+      if (!other.getName().isEmpty()) {
+        name_ = other.name_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.DeleteFeedRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.DeleteFeedRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object name_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The name of the feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder clearName() {
+
+      name_ = getDefaultInstance().getName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.DeleteFeedRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.DeleteFeedRequest)
+  private static final com.google.cloud.asset.v1p2beta1.DeleteFeedRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.DeleteFeedRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.DeleteFeedRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<DeleteFeedRequest> PARSER =
+      new com.google.protobuf.AbstractParser<DeleteFeedRequest>() {
+        @java.lang.Override
+        public DeleteFeedRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new DeleteFeedRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<DeleteFeedRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<DeleteFeedRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.DeleteFeedRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequestOrBuilder.java
new file mode 100644
index 000000000000..9528ccd5c577
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/DeleteFeedRequestOrBuilder.java
@@ -0,0 +1,37 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface DeleteFeedRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.DeleteFeedRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The name of the feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  java.lang.String getName();
+  /**
+   *
+   *
+   * <pre>
+   * The name of the feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  com.google.protobuf.ByteString getNameBytes();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequest.java
new file mode 100644
index 000000000000..1a5918844cbc
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequest.java
@@ -0,0 +1,1633 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Export asset request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.ExportAssetsRequest}
+ */
+public final class ExportAssetsRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.ExportAssetsRequest)
+    ExportAssetsRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use ExportAssetsRequest.newBuilder() to construct.
+  private ExportAssetsRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private ExportAssetsRequest() {
+    parent_ = "";
+    assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    contentType_ = 0;
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private ExportAssetsRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              parent_ = s;
+              break;
+            }
+          case 18:
+            {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (readTime_ != null) {
+                subBuilder = readTime_.toBuilder();
+              }
+              readTime_ =
+                  input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(readTime_);
+                readTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 26:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                assetTypes_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              assetTypes_.add(s);
+              break;
+            }
+          case 32:
+            {
+              int rawValue = input.readEnum();
+
+              contentType_ = rawValue;
+              break;
+            }
+          case 42:
+            {
+              com.google.cloud.asset.v1p2beta1.OutputConfig.Builder subBuilder = null;
+              if (outputConfig_ != null) {
+                subBuilder = outputConfig_.toBuilder();
+              }
+              outputConfig_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.OutputConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(outputConfig_);
+                outputConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = assetTypes_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.class,
+            com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int PARENT_FIELD_NUMBER = 1;
+  private volatile java.lang.Object parent_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. This can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id"), or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public java.lang.String getParent() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      parent_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. This can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id"), or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public com.google.protobuf.ByteString getParentBytes() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      parent_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int READ_TIME_FIELD_NUMBER = 2;
+  private com.google.protobuf.Timestamp readTime_;
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  public boolean hasReadTime() {
+    return readTime_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  public com.google.protobuf.Timestamp getReadTime() {
+    return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() {
+    return getReadTime();
+  }
+
+  public static final int ASSET_TYPES_FIELD_NUMBER = 3;
+  private com.google.protobuf.LazyStringList assetTypes_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public com.google.protobuf.ProtocolStringList getAssetTypesList() {
+    return assetTypes_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public int getAssetTypesCount() {
+    return assetTypes_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public java.lang.String getAssetTypes(int index) {
+    return assetTypes_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public com.google.protobuf.ByteString getAssetTypesBytes(int index) {
+    return assetTypes_.getByteString(index);
+  }
+
+  public static final int CONTENT_TYPE_FIELD_NUMBER = 4;
+  private int contentType_;
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name will be
+   * returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  public int getContentTypeValue() {
+    return contentType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name will be
+   * returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.asset.v1p2beta1.ContentType result =
+        com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+    return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+  }
+
+  public static final int OUTPUT_CONFIG_FIELD_NUMBER = 5;
+  private com.google.cloud.asset.v1p2beta1.OutputConfig outputConfig_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  public boolean hasOutputConfig() {
+    return outputConfig_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig() {
+    return outputConfig_ == null
+        ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+        : outputConfig_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder() {
+    return getOutputConfig();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getParentBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_);
+    }
+    if (readTime_ != null) {
+      output.writeMessage(2, getReadTime());
+    }
+    for (int i = 0; i < assetTypes_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, assetTypes_.getRaw(i));
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      output.writeEnum(4, contentType_);
+    }
+    if (outputConfig_ != null) {
+      output.writeMessage(5, getOutputConfig());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getParentBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_);
+    }
+    if (readTime_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getReadTime());
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < assetTypes_.size(); i++) {
+        dataSize += computeStringSizeNoTag(assetTypes_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAssetTypesList().size();
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, contentType_);
+    }
+    if (outputConfig_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getOutputConfig());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.ExportAssetsRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.ExportAssetsRequest other =
+        (com.google.cloud.asset.v1p2beta1.ExportAssetsRequest) obj;
+
+    if (!getParent().equals(other.getParent())) return false;
+    if (hasReadTime() != other.hasReadTime()) return false;
+    if (hasReadTime()) {
+      if (!getReadTime().equals(other.getReadTime())) return false;
+    }
+    if (!getAssetTypesList().equals(other.getAssetTypesList())) return false;
+    if (contentType_ != other.contentType_) return false;
+    if (hasOutputConfig() != other.hasOutputConfig()) return false;
+    if (hasOutputConfig()) {
+      if (!getOutputConfig().equals(other.getOutputConfig())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + PARENT_FIELD_NUMBER;
+    hash = (53 * hash) + getParent().hashCode();
+    if (hasReadTime()) {
+      hash = (37 * hash) + READ_TIME_FIELD_NUMBER;
+      hash = (53 * hash) + getReadTime().hashCode();
+    }
+    if (getAssetTypesCount() > 0) {
+      hash = (37 * hash) + ASSET_TYPES_FIELD_NUMBER;
+      hash = (53 * hash) + getAssetTypesList().hashCode();
+    }
+    hash = (37 * hash) + CONTENT_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + contentType_;
+    if (hasOutputConfig()) {
+      hash = (37 * hash) + OUTPUT_CONFIG_FIELD_NUMBER;
+      hash = (53 * hash) + getOutputConfig().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.ExportAssetsRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Export asset request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.ExportAssetsRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.ExportAssetsRequest)
+      com.google.cloud.asset.v1p2beta1.ExportAssetsRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.class,
+              com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      parent_ = "";
+
+      if (readTimeBuilder_ == null) {
+        readTime_ = null;
+      } else {
+        readTime_ = null;
+        readTimeBuilder_ = null;
+      }
+      assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000004);
+      contentType_ = 0;
+
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = null;
+      } else {
+        outputConfig_ = null;
+        outputConfigBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsRequest build() {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsRequest result =
+          new com.google.cloud.asset.v1p2beta1.ExportAssetsRequest(this);
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      result.parent_ = parent_;
+      if (readTimeBuilder_ == null) {
+        result.readTime_ = readTime_;
+      } else {
+        result.readTime_ = readTimeBuilder_.build();
+      }
+      if (((bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = assetTypes_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000004);
+      }
+      result.assetTypes_ = assetTypes_;
+      result.contentType_ = contentType_;
+      if (outputConfigBuilder_ == null) {
+        result.outputConfig_ = outputConfig_;
+      } else {
+        result.outputConfig_ = outputConfigBuilder_.build();
+      }
+      result.bitField0_ = to_bitField0_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.ExportAssetsRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.ExportAssetsRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.ExportAssetsRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.ExportAssetsRequest.getDefaultInstance())
+        return this;
+      if (!other.getParent().isEmpty()) {
+        parent_ = other.parent_;
+        onChanged();
+      }
+      if (other.hasReadTime()) {
+        mergeReadTime(other.getReadTime());
+      }
+      if (!other.assetTypes_.isEmpty()) {
+        if (assetTypes_.isEmpty()) {
+          assetTypes_ = other.assetTypes_;
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          ensureAssetTypesIsMutable();
+          assetTypes_.addAll(other.assetTypes_);
+        }
+        onChanged();
+      }
+      if (other.contentType_ != 0) {
+        setContentTypeValue(other.getContentTypeValue());
+      }
+      if (other.hasOutputConfig()) {
+        mergeOutputConfig(other.getOutputConfig());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.ExportAssetsRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.lang.Object parent_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. This can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id"), or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public java.lang.String getParent() {
+      java.lang.Object ref = parent_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        parent_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. This can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id"), or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public com.google.protobuf.ByteString getParentBytes() {
+      java.lang.Object ref = parent_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        parent_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. This can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id"), or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParent(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. This can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id"), or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder clearParent() {
+
+      parent_ = getDefaultInstance().getParent();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The relative name of the root asset. This can only be an
+     * organization number (such as "organizations/123"), a project ID (such as
+     * "projects/my-project-id"), or a project number (such as "projects/12345").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParentBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Timestamp readTime_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        readTimeBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public boolean hasReadTime() {
+      return readTimeBuilder_ != null || readTime_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public com.google.protobuf.Timestamp getReadTime() {
+      if (readTimeBuilder_ == null) {
+        return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+      } else {
+        return readTimeBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public Builder setReadTime(com.google.protobuf.Timestamp value) {
+      if (readTimeBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        readTime_ = value;
+        onChanged();
+      } else {
+        readTimeBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (readTimeBuilder_ == null) {
+        readTime_ = builderForValue.build();
+        onChanged();
+      } else {
+        readTimeBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public Builder mergeReadTime(com.google.protobuf.Timestamp value) {
+      if (readTimeBuilder_ == null) {
+        if (readTime_ != null) {
+          readTime_ =
+              com.google.protobuf.Timestamp.newBuilder(readTime_).mergeFrom(value).buildPartial();
+        } else {
+          readTime_ = value;
+        }
+        onChanged();
+      } else {
+        readTimeBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public Builder clearReadTime() {
+      if (readTimeBuilder_ == null) {
+        readTime_ = null;
+        onChanged();
+      } else {
+        readTime_ = null;
+        readTimeBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() {
+
+      onChanged();
+      return getReadTimeFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() {
+      if (readTimeBuilder_ != null) {
+        return readTimeBuilder_.getMessageOrBuilder();
+      } else {
+        return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Timestamp to take an asset snapshot. This can only be set to a timestamp
+     * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+     * the current time will be used. Due to delays in resource data collection
+     * and indexing, there is a volatile window during which running the same
+     * query may get different results.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        getReadTimeFieldBuilder() {
+      if (readTimeBuilder_ == null) {
+        readTimeBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Timestamp,
+                com.google.protobuf.Timestamp.Builder,
+                com.google.protobuf.TimestampOrBuilder>(
+                getReadTime(), getParentForChildren(), isClean());
+        readTime_ = null;
+      }
+      return readTimeBuilder_;
+    }
+
+    private com.google.protobuf.LazyStringList assetTypes_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
+
+    private void ensureAssetTypesIsMutable() {
+      if (!((bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = new com.google.protobuf.LazyStringArrayList(assetTypes_);
+        bitField0_ |= 0x00000004;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public com.google.protobuf.ProtocolStringList getAssetTypesList() {
+      return assetTypes_.getUnmodifiableView();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public int getAssetTypesCount() {
+      return assetTypes_.size();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public java.lang.String getAssetTypes(int index) {
+      return assetTypes_.get(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public com.google.protobuf.ByteString getAssetTypesBytes(int index) {
+      return assetTypes_.getByteString(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder setAssetTypes(int index, java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetTypesIsMutable();
+      assetTypes_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAssetTypes(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetTypesIsMutable();
+      assetTypes_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAllAssetTypes(java.lang.Iterable<java.lang.String> values) {
+      ensureAssetTypesIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(values, assetTypes_);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder clearAssetTypes() {
+      assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of asset types of which to take a snapshot for. For example:
+     * "compute.googleapis.com/Disk". If specified, only matching assets will be
+     * returned. See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAssetTypesBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      ensureAssetTypesIsMutable();
+      assetTypes_.add(value);
+      onChanged();
+      return this;
+    }
+
+    private int contentType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name will be
+     * returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public int getContentTypeValue() {
+      return contentType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name will be
+     * returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder setContentTypeValue(int value) {
+      contentType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name will be
+     * returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.asset.v1p2beta1.ContentType result =
+          com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+      return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name will be
+     * returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder setContentType(com.google.cloud.asset.v1p2beta1.ContentType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      contentType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name will be
+     * returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder clearContentType() {
+
+      contentType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.OutputConfig outputConfig_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.OutputConfig,
+            com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>
+        outputConfigBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public boolean hasOutputConfig() {
+      return outputConfigBuilder_ != null || outputConfig_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig() {
+      if (outputConfigBuilder_ == null) {
+        return outputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+            : outputConfig_;
+      } else {
+        return outputConfigBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public Builder setOutputConfig(com.google.cloud.asset.v1p2beta1.OutputConfig value) {
+      if (outputConfigBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        outputConfig_ = value;
+        onChanged();
+      } else {
+        outputConfigBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public Builder setOutputConfig(
+        com.google.cloud.asset.v1p2beta1.OutputConfig.Builder builderForValue) {
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = builderForValue.build();
+        onChanged();
+      } else {
+        outputConfigBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public Builder mergeOutputConfig(com.google.cloud.asset.v1p2beta1.OutputConfig value) {
+      if (outputConfigBuilder_ == null) {
+        if (outputConfig_ != null) {
+          outputConfig_ =
+              com.google.cloud.asset.v1p2beta1.OutputConfig.newBuilder(outputConfig_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          outputConfig_ = value;
+        }
+        onChanged();
+      } else {
+        outputConfigBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public Builder clearOutputConfig() {
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = null;
+        onChanged();
+      } else {
+        outputConfig_ = null;
+        outputConfigBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfig.Builder getOutputConfigBuilder() {
+
+      onChanged();
+      return getOutputConfigFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder() {
+      if (outputConfigBuilder_ != null) {
+        return outputConfigBuilder_.getMessageOrBuilder();
+      } else {
+        return outputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+            : outputConfig_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Output configuration indicating where the results will be output
+     * to. All results will be in newline delimited JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.OutputConfig,
+            com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>
+        getOutputConfigFieldBuilder() {
+      if (outputConfigBuilder_ == null) {
+        outputConfigBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.OutputConfig,
+                com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+                com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>(
+                getOutputConfig(), getParentForChildren(), isClean());
+        outputConfig_ = null;
+      }
+      return outputConfigBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.ExportAssetsRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.ExportAssetsRequest)
+  private static final com.google.cloud.asset.v1p2beta1.ExportAssetsRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.ExportAssetsRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<ExportAssetsRequest> PARSER =
+      new com.google.protobuf.AbstractParser<ExportAssetsRequest>() {
+        @java.lang.Override
+        public ExportAssetsRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new ExportAssetsRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<ExportAssetsRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<ExportAssetsRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.ExportAssetsRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequestOrBuilder.java
new file mode 100644
index 000000000000..d007536ff5ad
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsRequestOrBuilder.java
@@ -0,0 +1,192 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface ExportAssetsRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.ExportAssetsRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. This can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id"), or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  java.lang.String getParent();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The relative name of the root asset. This can only be an
+   * organization number (such as "organizations/123"), a project ID (such as
+   * "projects/my-project-id"), or a project number (such as "projects/12345").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  com.google.protobuf.ByteString getParentBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  boolean hasReadTime();
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  com.google.protobuf.Timestamp getReadTime();
+  /**
+   *
+   *
+   * <pre>
+   * Timestamp to take an asset snapshot. This can only be set to a timestamp
+   * between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+   * the current time will be used. Due to delays in resource data collection
+   * and indexing, there is a volatile window during which running the same
+   * query may get different results.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 2;</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  java.util.List<java.lang.String> getAssetTypesList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  int getAssetTypesCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  java.lang.String getAssetTypes(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of asset types of which to take a snapshot for. For example:
+   * "compute.googleapis.com/Disk". If specified, only matching assets will be
+   * returned. See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  com.google.protobuf.ByteString getAssetTypesBytes(int index);
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name will be
+   * returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  int getContentTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name will be
+   * returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.ContentType getContentType();
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  boolean hasOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Required. Output configuration indicating where the results will be output
+   * to. All results will be in newline delimited JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 5;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponse.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponse.java
new file mode 100644
index 000000000000..d1bc38cf2a58
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponse.java
@@ -0,0 +1,977 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * The export asset response. This message is returned by the
+ * [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation] method in the returned
+ * [google.longrunning.Operation.response][google.longrunning.Operation.response] field.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.ExportAssetsResponse}
+ */
+public final class ExportAssetsResponse extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.ExportAssetsResponse)
+    ExportAssetsResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use ExportAssetsResponse.newBuilder() to construct.
+  private ExportAssetsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private ExportAssetsResponse() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private ExportAssetsResponse(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (readTime_ != null) {
+                subBuilder = readTime_.toBuilder();
+              }
+              readTime_ =
+                  input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(readTime_);
+                readTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 18:
+            {
+              com.google.cloud.asset.v1p2beta1.OutputConfig.Builder subBuilder = null;
+              if (outputConfig_ != null) {
+                subBuilder = outputConfig_.toBuilder();
+              }
+              outputConfig_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.OutputConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(outputConfig_);
+                outputConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.class,
+            com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.Builder.class);
+  }
+
+  public static final int READ_TIME_FIELD_NUMBER = 1;
+  private com.google.protobuf.Timestamp readTime_;
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  public boolean hasReadTime() {
+    return readTime_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  public com.google.protobuf.Timestamp getReadTime() {
+    return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() {
+    return getReadTime();
+  }
+
+  public static final int OUTPUT_CONFIG_FIELD_NUMBER = 2;
+  private com.google.cloud.asset.v1p2beta1.OutputConfig outputConfig_;
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  public boolean hasOutputConfig() {
+    return outputConfig_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig() {
+    return outputConfig_ == null
+        ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+        : outputConfig_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder() {
+    return getOutputConfig();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (readTime_ != null) {
+      output.writeMessage(1, getReadTime());
+    }
+    if (outputConfig_ != null) {
+      output.writeMessage(2, getOutputConfig());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (readTime_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getReadTime());
+    }
+    if (outputConfig_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOutputConfig());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.ExportAssetsResponse)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.ExportAssetsResponse other =
+        (com.google.cloud.asset.v1p2beta1.ExportAssetsResponse) obj;
+
+    if (hasReadTime() != other.hasReadTime()) return false;
+    if (hasReadTime()) {
+      if (!getReadTime().equals(other.getReadTime())) return false;
+    }
+    if (hasOutputConfig() != other.hasOutputConfig()) return false;
+    if (hasOutputConfig()) {
+      if (!getOutputConfig().equals(other.getOutputConfig())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasReadTime()) {
+      hash = (37 * hash) + READ_TIME_FIELD_NUMBER;
+      hash = (53 * hash) + getReadTime().hashCode();
+    }
+    if (hasOutputConfig()) {
+      hash = (37 * hash) + OUTPUT_CONFIG_FIELD_NUMBER;
+      hash = (53 * hash) + getOutputConfig().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(
+      com.google.cloud.asset.v1p2beta1.ExportAssetsResponse prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The export asset response. This message is returned by the
+   * [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation] method in the returned
+   * [google.longrunning.Operation.response][google.longrunning.Operation.response] field.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.ExportAssetsResponse}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.ExportAssetsResponse)
+      com.google.cloud.asset.v1p2beta1.ExportAssetsResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.class,
+              com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (readTimeBuilder_ == null) {
+        readTime_ = null;
+      } else {
+        readTime_ = null;
+        readTimeBuilder_ = null;
+      }
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = null;
+      } else {
+        outputConfig_ = null;
+        outputConfigBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ExportAssetsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsResponse getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsResponse build() {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ExportAssetsResponse buildPartial() {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsResponse result =
+          new com.google.cloud.asset.v1p2beta1.ExportAssetsResponse(this);
+      if (readTimeBuilder_ == null) {
+        result.readTime_ = readTime_;
+      } else {
+        result.readTime_ = readTimeBuilder_.build();
+      }
+      if (outputConfigBuilder_ == null) {
+        result.outputConfig_ = outputConfig_;
+      } else {
+        result.outputConfig_ = outputConfigBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.ExportAssetsResponse) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.ExportAssetsResponse) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.ExportAssetsResponse other) {
+      if (other == com.google.cloud.asset.v1p2beta1.ExportAssetsResponse.getDefaultInstance())
+        return this;
+      if (other.hasReadTime()) {
+        mergeReadTime(other.getReadTime());
+      }
+      if (other.hasOutputConfig()) {
+        mergeOutputConfig(other.getOutputConfig());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.ExportAssetsResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.ExportAssetsResponse) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Timestamp readTime_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        readTimeBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public boolean hasReadTime() {
+      return readTimeBuilder_ != null || readTime_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public com.google.protobuf.Timestamp getReadTime() {
+      if (readTimeBuilder_ == null) {
+        return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+      } else {
+        return readTimeBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public Builder setReadTime(com.google.protobuf.Timestamp value) {
+      if (readTimeBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        readTime_ = value;
+        onChanged();
+      } else {
+        readTimeBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (readTimeBuilder_ == null) {
+        readTime_ = builderForValue.build();
+        onChanged();
+      } else {
+        readTimeBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public Builder mergeReadTime(com.google.protobuf.Timestamp value) {
+      if (readTimeBuilder_ == null) {
+        if (readTime_ != null) {
+          readTime_ =
+              com.google.protobuf.Timestamp.newBuilder(readTime_).mergeFrom(value).buildPartial();
+        } else {
+          readTime_ = value;
+        }
+        onChanged();
+      } else {
+        readTimeBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public Builder clearReadTime() {
+      if (readTimeBuilder_ == null) {
+        readTime_ = null;
+        onChanged();
+      } else {
+        readTime_ = null;
+        readTimeBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() {
+
+      onChanged();
+      return getReadTimeFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() {
+      if (readTimeBuilder_ != null) {
+        return readTimeBuilder_.getMessageOrBuilder();
+      } else {
+        return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Time the snapshot was taken.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp read_time = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        getReadTimeFieldBuilder() {
+      if (readTimeBuilder_ == null) {
+        readTimeBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Timestamp,
+                com.google.protobuf.Timestamp.Builder,
+                com.google.protobuf.TimestampOrBuilder>(
+                getReadTime(), getParentForChildren(), isClean());
+        readTime_ = null;
+      }
+      return readTimeBuilder_;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.OutputConfig outputConfig_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.OutputConfig,
+            com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>
+        outputConfigBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public boolean hasOutputConfig() {
+      return outputConfigBuilder_ != null || outputConfig_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig() {
+      if (outputConfigBuilder_ == null) {
+        return outputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+            : outputConfig_;
+      } else {
+        return outputConfigBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public Builder setOutputConfig(com.google.cloud.asset.v1p2beta1.OutputConfig value) {
+      if (outputConfigBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        outputConfig_ = value;
+        onChanged();
+      } else {
+        outputConfigBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public Builder setOutputConfig(
+        com.google.cloud.asset.v1p2beta1.OutputConfig.Builder builderForValue) {
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = builderForValue.build();
+        onChanged();
+      } else {
+        outputConfigBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public Builder mergeOutputConfig(com.google.cloud.asset.v1p2beta1.OutputConfig value) {
+      if (outputConfigBuilder_ == null) {
+        if (outputConfig_ != null) {
+          outputConfig_ =
+              com.google.cloud.asset.v1p2beta1.OutputConfig.newBuilder(outputConfig_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          outputConfig_ = value;
+        }
+        onChanged();
+      } else {
+        outputConfigBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public Builder clearOutputConfig() {
+      if (outputConfigBuilder_ == null) {
+        outputConfig_ = null;
+        onChanged();
+      } else {
+        outputConfig_ = null;
+        outputConfigBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfig.Builder getOutputConfigBuilder() {
+
+      onChanged();
+      return getOutputConfigFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder() {
+      if (outputConfigBuilder_ != null) {
+        return outputConfigBuilder_.getMessageOrBuilder();
+      } else {
+        return outputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()
+            : outputConfig_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output configuration indicating where the results were output to.
+     * All results are in JSON format.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.OutputConfig,
+            com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>
+        getOutputConfigFieldBuilder() {
+      if (outputConfigBuilder_ == null) {
+        outputConfigBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.OutputConfig,
+                com.google.cloud.asset.v1p2beta1.OutputConfig.Builder,
+                com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder>(
+                getOutputConfig(), getParentForChildren(), isClean());
+        outputConfig_ = null;
+      }
+      return outputConfigBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.ExportAssetsResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.ExportAssetsResponse)
+  private static final com.google.cloud.asset.v1p2beta1.ExportAssetsResponse DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.ExportAssetsResponse();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ExportAssetsResponse getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<ExportAssetsResponse> PARSER =
+      new com.google.protobuf.AbstractParser<ExportAssetsResponse>() {
+        @java.lang.Override
+        public ExportAssetsResponse parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new ExportAssetsResponse(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<ExportAssetsResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<ExportAssetsResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.ExportAssetsResponse getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponseOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponseOrBuilder.java
new file mode 100644
index 000000000000..d7712b774917
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ExportAssetsResponseOrBuilder.java
@@ -0,0 +1,75 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface ExportAssetsResponseOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.ExportAssetsResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  boolean hasReadTime();
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  com.google.protobuf.Timestamp getReadTime();
+  /**
+   *
+   *
+   * <pre>
+   * Time the snapshot was taken.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp read_time = 1;</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  boolean hasOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.OutputConfig getOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration indicating where the results were output to.
+   * All results are in JSON format.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.OutputConfig output_config = 2;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder getOutputConfigOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Feed.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Feed.java
new file mode 100644
index 000000000000..cb8010532008
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Feed.java
@@ -0,0 +1,1713 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * An asset feed used to export asset updates to a destinations.
+ * An asset feed filter controls what updates are exported.
+ * The asset feed must be created within a project, organization, or
+ * folder. Supported destinations are:
+ * Cloud Pub/Sub topics.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.Feed}
+ */
+public final class Feed extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.Feed)
+    FeedOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use Feed.newBuilder() to construct.
+  private Feed(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private Feed() {
+    name_ = "";
+    assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    contentType_ = 0;
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private Feed(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                assetNames_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              assetNames_.add(s);
+              break;
+            }
+          case 26:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                assetTypes_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              assetTypes_.add(s);
+              break;
+            }
+          case 32:
+            {
+              int rawValue = input.readEnum();
+
+              contentType_ = rawValue;
+              break;
+            }
+          case 42:
+            {
+              com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder subBuilder = null;
+              if (feedOutputConfig_ != null) {
+                subBuilder = feedOutputConfig_.toBuilder();
+              }
+              feedOutputConfig_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.FeedOutputConfig.parser(),
+                      extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(feedOutputConfig_);
+                feedOutputConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = assetNames_.getUnmodifiableView();
+      }
+      if (((mutable_bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = assetTypes_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_Feed_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.Feed.class,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int NAME_FIELD_NUMBER = 1;
+  private volatile java.lang.Object name_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The format will be
+   * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+   * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+   * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+   * The client-assigned feed identifier must be unique within the parent
+   * project/folder/organization.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public java.lang.String getName() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      name_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The format will be
+   * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+   * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+   * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+   * The client-assigned feed identifier must be unique within the parent
+   * project/folder/organization.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public com.google.protobuf.ByteString getNameBytes() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      name_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int ASSET_NAMES_FIELD_NUMBER = 2;
+  private com.google.protobuf.LazyStringList assetNames_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public com.google.protobuf.ProtocolStringList getAssetNamesList() {
+    return assetNames_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public int getAssetNamesCount() {
+    return assetNames_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public java.lang.String getAssetNames(int index) {
+    return assetNames_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  public com.google.protobuf.ByteString getAssetNamesBytes(int index) {
+    return assetNames_.getByteString(index);
+  }
+
+  public static final int ASSET_TYPES_FIELD_NUMBER = 3;
+  private com.google.protobuf.LazyStringList assetTypes_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public com.google.protobuf.ProtocolStringList getAssetTypesList() {
+    return assetTypes_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public int getAssetTypesCount() {
+    return assetTypes_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public java.lang.String getAssetTypes(int index) {
+    return assetTypes_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  public com.google.protobuf.ByteString getAssetTypesBytes(int index) {
+    return assetTypes_.getByteString(index);
+  }
+
+  public static final int CONTENT_TYPE_FIELD_NUMBER = 4;
+  private int contentType_;
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name and
+   * type will be returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  public int getContentTypeValue() {
+    return contentType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name and
+   * type will be returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.asset.v1p2beta1.ContentType result =
+        com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+    return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+  }
+
+  public static final int FEED_OUTPUT_CONFIG_FIELD_NUMBER = 5;
+  private com.google.cloud.asset.v1p2beta1.FeedOutputConfig feedOutputConfig_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  public boolean hasFeedOutputConfig() {
+    return feedOutputConfig_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.FeedOutputConfig getFeedOutputConfig() {
+    return feedOutputConfig_ == null
+        ? com.google.cloud.asset.v1p2beta1.FeedOutputConfig.getDefaultInstance()
+        : feedOutputConfig_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder getFeedOutputConfigOrBuilder() {
+    return getFeedOutputConfig();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+    }
+    for (int i = 0; i < assetNames_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, assetNames_.getRaw(i));
+    }
+    for (int i = 0; i < assetTypes_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, assetTypes_.getRaw(i));
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      output.writeEnum(4, contentType_);
+    }
+    if (feedOutputConfig_ != null) {
+      output.writeMessage(5, getFeedOutputConfig());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < assetNames_.size(); i++) {
+        dataSize += computeStringSizeNoTag(assetNames_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAssetNamesList().size();
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < assetTypes_.size(); i++) {
+        dataSize += computeStringSizeNoTag(assetTypes_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAssetTypesList().size();
+    }
+    if (contentType_
+        != com.google.cloud.asset.v1p2beta1.ContentType.CONTENT_TYPE_UNSPECIFIED.getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, contentType_);
+    }
+    if (feedOutputConfig_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getFeedOutputConfig());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.Feed)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.Feed other = (com.google.cloud.asset.v1p2beta1.Feed) obj;
+
+    if (!getName().equals(other.getName())) return false;
+    if (!getAssetNamesList().equals(other.getAssetNamesList())) return false;
+    if (!getAssetTypesList().equals(other.getAssetTypesList())) return false;
+    if (contentType_ != other.contentType_) return false;
+    if (hasFeedOutputConfig() != other.hasFeedOutputConfig()) return false;
+    if (hasFeedOutputConfig()) {
+      if (!getFeedOutputConfig().equals(other.getFeedOutputConfig())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getName().hashCode();
+    if (getAssetNamesCount() > 0) {
+      hash = (37 * hash) + ASSET_NAMES_FIELD_NUMBER;
+      hash = (53 * hash) + getAssetNamesList().hashCode();
+    }
+    if (getAssetTypesCount() > 0) {
+      hash = (37 * hash) + ASSET_TYPES_FIELD_NUMBER;
+      hash = (53 * hash) + getAssetTypesList().hashCode();
+    }
+    hash = (37 * hash) + CONTENT_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + contentType_;
+    if (hasFeedOutputConfig()) {
+      hash = (37 * hash) + FEED_OUTPUT_CONFIG_FIELD_NUMBER;
+      hash = (53 * hash) + getFeedOutputConfig().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.Feed prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * An asset feed used to export asset updates to a destinations.
+   * An asset feed filter controls what updates are exported.
+   * The asset feed must be created within a project, organization, or
+   * folder. Supported destinations are:
+   * Cloud Pub/Sub topics.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.Feed}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.Feed)
+      com.google.cloud.asset.v1p2beta1.FeedOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_Feed_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.Feed.class,
+              com.google.cloud.asset.v1p2beta1.Feed.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.Feed.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      name_ = "";
+
+      assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000002);
+      assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000004);
+      contentType_ = 0;
+
+      if (feedOutputConfigBuilder_ == null) {
+        feedOutputConfig_ = null;
+      } else {
+        feedOutputConfig_ = null;
+        feedOutputConfigBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_Feed_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Feed getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Feed build() {
+      com.google.cloud.asset.v1p2beta1.Feed result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Feed buildPartial() {
+      com.google.cloud.asset.v1p2beta1.Feed result =
+          new com.google.cloud.asset.v1p2beta1.Feed(this);
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      result.name_ = name_;
+      if (((bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = assetNames_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000002);
+      }
+      result.assetNames_ = assetNames_;
+      if (((bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = assetTypes_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000004);
+      }
+      result.assetTypes_ = assetTypes_;
+      result.contentType_ = contentType_;
+      if (feedOutputConfigBuilder_ == null) {
+        result.feedOutputConfig_ = feedOutputConfig_;
+      } else {
+        result.feedOutputConfig_ = feedOutputConfigBuilder_.build();
+      }
+      result.bitField0_ = to_bitField0_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.Feed) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.Feed) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.Feed other) {
+      if (other == com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance()) return this;
+      if (!other.getName().isEmpty()) {
+        name_ = other.name_;
+        onChanged();
+      }
+      if (!other.assetNames_.isEmpty()) {
+        if (assetNames_.isEmpty()) {
+          assetNames_ = other.assetNames_;
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          ensureAssetNamesIsMutable();
+          assetNames_.addAll(other.assetNames_);
+        }
+        onChanged();
+      }
+      if (!other.assetTypes_.isEmpty()) {
+        if (assetTypes_.isEmpty()) {
+          assetTypes_ = other.assetTypes_;
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          ensureAssetTypesIsMutable();
+          assetTypes_.addAll(other.assetTypes_);
+        }
+        onChanged();
+      }
+      if (other.contentType_ != 0) {
+        setContentTypeValue(other.getContentTypeValue());
+      }
+      if (other.hasFeedOutputConfig()) {
+        mergeFeedOutputConfig(other.getFeedOutputConfig());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.Feed parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.Feed) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.lang.Object name_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The format will be
+     * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+     * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+     * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+     * The client-assigned feed identifier must be unique within the parent
+     * project/folder/organization.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The format will be
+     * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+     * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+     * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+     * The client-assigned feed identifier must be unique within the parent
+     * project/folder/organization.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The format will be
+     * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+     * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+     * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+     * The client-assigned feed identifier must be unique within the parent
+     * project/folder/organization.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The format will be
+     * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+     * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+     * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+     * The client-assigned feed identifier must be unique within the parent
+     * project/folder/organization.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder clearName() {
+
+      name_ = getDefaultInstance().getName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The format will be
+     * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+     * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+     * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+     * The client-assigned feed identifier must be unique within the parent
+     * project/folder/organization.
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList assetNames_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
+
+    private void ensureAssetNamesIsMutable() {
+      if (!((bitField0_ & 0x00000002) != 0)) {
+        assetNames_ = new com.google.protobuf.LazyStringArrayList(assetNames_);
+        bitField0_ |= 0x00000002;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public com.google.protobuf.ProtocolStringList getAssetNamesList() {
+      return assetNames_.getUnmodifiableView();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public int getAssetNamesCount() {
+      return assetNames_.size();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public java.lang.String getAssetNames(int index) {
+      return assetNames_.get(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public com.google.protobuf.ByteString getAssetNamesBytes(int index) {
+      return assetNames_.getByteString(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder setAssetNames(int index, java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetNamesIsMutable();
+      assetNames_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAssetNames(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetNamesIsMutable();
+      assetNames_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAllAssetNames(java.lang.Iterable<java.lang.String> values) {
+      ensureAssetNamesIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(values, assetNames_);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder clearAssetNames() {
+      assetNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000002);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of the full names of the assets to receive updates. You must specify
+     * either or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed. For
+     * example:
+     * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+     * See [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more info.
+     * </pre>
+     *
+     * <code>repeated string asset_names = 2;</code>
+     */
+    public Builder addAssetNamesBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      ensureAssetNamesIsMutable();
+      assetNames_.add(value);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList assetTypes_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
+
+    private void ensureAssetTypesIsMutable() {
+      if (!((bitField0_ & 0x00000004) != 0)) {
+        assetTypes_ = new com.google.protobuf.LazyStringArrayList(assetTypes_);
+        bitField0_ |= 0x00000004;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public com.google.protobuf.ProtocolStringList getAssetTypesList() {
+      return assetTypes_.getUnmodifiableView();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public int getAssetTypesCount() {
+      return assetTypes_.size();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public java.lang.String getAssetTypes(int index) {
+      return assetTypes_.get(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public com.google.protobuf.ByteString getAssetTypesBytes(int index) {
+      return assetTypes_.getByteString(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder setAssetTypes(int index, java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetTypesIsMutable();
+      assetTypes_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAssetTypes(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      ensureAssetTypesIsMutable();
+      assetTypes_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAllAssetTypes(java.lang.Iterable<java.lang.String> values) {
+      ensureAssetTypesIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(values, assetTypes_);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder clearAssetTypes() {
+      assetTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of types of the assets to receive updates. You must specify either
+     * or both of asset_names and asset_types. Only asset updates matching
+     * specified asset_names and asset_types are exported to the feed.
+     * For example:
+     * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+     * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+     * for all supported asset types.
+     * </pre>
+     *
+     * <code>repeated string asset_types = 3;</code>
+     */
+    public Builder addAssetTypesBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      ensureAssetTypesIsMutable();
+      assetTypes_.add(value);
+      onChanged();
+      return this;
+    }
+
+    private int contentType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name and
+     * type will be returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public int getContentTypeValue() {
+      return contentType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name and
+     * type will be returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder setContentTypeValue(int value) {
+      contentType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name and
+     * type will be returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.ContentType getContentType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.asset.v1p2beta1.ContentType result =
+          com.google.cloud.asset.v1p2beta1.ContentType.valueOf(contentType_);
+      return result == null ? com.google.cloud.asset.v1p2beta1.ContentType.UNRECOGNIZED : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name and
+     * type will be returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder setContentType(com.google.cloud.asset.v1p2beta1.ContentType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      contentType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset content type. If not specified, no content but the asset name and
+     * type will be returned.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+     */
+    public Builder clearContentType() {
+
+      contentType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.FeedOutputConfig feedOutputConfig_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig,
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder>
+        feedOutputConfigBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public boolean hasFeedOutputConfig() {
+      return feedOutputConfigBuilder_ != null || feedOutputConfig_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfig getFeedOutputConfig() {
+      if (feedOutputConfigBuilder_ == null) {
+        return feedOutputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.FeedOutputConfig.getDefaultInstance()
+            : feedOutputConfig_;
+      } else {
+        return feedOutputConfigBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public Builder setFeedOutputConfig(com.google.cloud.asset.v1p2beta1.FeedOutputConfig value) {
+      if (feedOutputConfigBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        feedOutputConfig_ = value;
+        onChanged();
+      } else {
+        feedOutputConfigBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public Builder setFeedOutputConfig(
+        com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder builderForValue) {
+      if (feedOutputConfigBuilder_ == null) {
+        feedOutputConfig_ = builderForValue.build();
+        onChanged();
+      } else {
+        feedOutputConfigBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public Builder mergeFeedOutputConfig(com.google.cloud.asset.v1p2beta1.FeedOutputConfig value) {
+      if (feedOutputConfigBuilder_ == null) {
+        if (feedOutputConfig_ != null) {
+          feedOutputConfig_ =
+              com.google.cloud.asset.v1p2beta1.FeedOutputConfig.newBuilder(feedOutputConfig_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          feedOutputConfig_ = value;
+        }
+        onChanged();
+      } else {
+        feedOutputConfigBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public Builder clearFeedOutputConfig() {
+      if (feedOutputConfigBuilder_ == null) {
+        feedOutputConfig_ = null;
+        onChanged();
+      } else {
+        feedOutputConfig_ = null;
+        feedOutputConfigBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder getFeedOutputConfigBuilder() {
+
+      onChanged();
+      return getFeedOutputConfigFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder
+        getFeedOutputConfigOrBuilder() {
+      if (feedOutputConfigBuilder_ != null) {
+        return feedOutputConfigBuilder_.getMessageOrBuilder();
+      } else {
+        return feedOutputConfig_ == null
+            ? com.google.cloud.asset.v1p2beta1.FeedOutputConfig.getDefaultInstance()
+            : feedOutputConfig_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. Feed output configuration defining where the asset updates are
+     * published to.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig,
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder>
+        getFeedOutputConfigFieldBuilder() {
+      if (feedOutputConfigBuilder_ == null) {
+        feedOutputConfigBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.FeedOutputConfig,
+                com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder,
+                com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder>(
+                getFeedOutputConfig(), getParentForChildren(), isClean());
+        feedOutputConfig_ = null;
+      }
+      return feedOutputConfigBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.Feed)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.Feed)
+  private static final com.google.cloud.asset.v1p2beta1.Feed DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.Feed();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Feed getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Feed> PARSER =
+      new com.google.protobuf.AbstractParser<Feed>() {
+        @java.lang.Override
+        public Feed parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new Feed(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<Feed> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Feed> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.Feed getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedName.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedName.java
new file mode 100644
index 000000000000..0880f66b82e0
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedName.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2018 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.pathtemplate.PathTemplate;
+import com.google.api.resourcenames.ResourceName;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+@javax.annotation.Generated("by GAPIC protoc plugin")
+public class FeedName implements ResourceName {
+
+  private static final PathTemplate PATH_TEMPLATE =
+      PathTemplate.createWithoutUrlEncoding("projects/{project}/feeds/{feed}");
+
+  private volatile Map<String, String> fieldValuesMap;
+
+  private final String project;
+  private final String feed;
+
+  public String getProject() {
+    return project;
+  }
+
+  public String getFeed() {
+    return feed;
+  }
+
+  public static Builder newBuilder() {
+    return new Builder();
+  }
+
+  public Builder toBuilder() {
+    return new Builder(this);
+  }
+
+  private FeedName(Builder builder) {
+    project = Preconditions.checkNotNull(builder.getProject());
+    feed = Preconditions.checkNotNull(builder.getFeed());
+  }
+
+  public static FeedName of(String project, String feed) {
+    return newBuilder().setProject(project).setFeed(feed).build();
+  }
+
+  public static String format(String project, String feed) {
+    return newBuilder().setProject(project).setFeed(feed).build().toString();
+  }
+
+  public static FeedName parse(String formattedString) {
+    if (formattedString.isEmpty()) {
+      return null;
+    }
+    Map<String, String> matchMap =
+        PATH_TEMPLATE.validatedMatch(
+            formattedString, "FeedName.parse: formattedString not in valid format");
+    return of(matchMap.get("project"), matchMap.get("feed"));
+  }
+
+  public static List<FeedName> parseList(List<String> formattedStrings) {
+    List<FeedName> list = new ArrayList<>(formattedStrings.size());
+    for (String formattedString : formattedStrings) {
+      list.add(parse(formattedString));
+    }
+    return list;
+  }
+
+  public static List<String> toStringList(List<FeedName> values) {
+    List<String> list = new ArrayList<String>(values.size());
+    for (FeedName value : values) {
+      if (value == null) {
+        list.add("");
+      } else {
+        list.add(value.toString());
+      }
+    }
+    return list;
+  }
+
+  public static boolean isParsableFrom(String formattedString) {
+    return PATH_TEMPLATE.matches(formattedString);
+  }
+
+  public Map<String, String> getFieldValuesMap() {
+    if (fieldValuesMap == null) {
+      synchronized (this) {
+        if (fieldValuesMap == null) {
+          ImmutableMap.Builder<String, String> fieldMapBuilder = ImmutableMap.builder();
+          fieldMapBuilder.put("project", project);
+          fieldMapBuilder.put("feed", feed);
+          fieldValuesMap = fieldMapBuilder.build();
+        }
+      }
+    }
+    return fieldValuesMap;
+  }
+
+  public String getFieldValue(String fieldName) {
+    return getFieldValuesMap().get(fieldName);
+  }
+
+  @Override
+  public String toString() {
+    return PATH_TEMPLATE.instantiate("project", project, "feed", feed);
+  }
+
+  /** Builder for FeedName. */
+  public static class Builder {
+
+    private String project;
+    private String feed;
+
+    public String getProject() {
+      return project;
+    }
+
+    public String getFeed() {
+      return feed;
+    }
+
+    public Builder setProject(String project) {
+      this.project = project;
+      return this;
+    }
+
+    public Builder setFeed(String feed) {
+      this.feed = feed;
+      return this;
+    }
+
+    private Builder() {}
+
+    private Builder(FeedName feedName) {
+      project = feedName.project;
+      feed = feedName.feed;
+    }
+
+    public FeedName build() {
+      return new FeedName(this);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (o == this) {
+      return true;
+    }
+    if (o instanceof FeedName) {
+      FeedName that = (FeedName) o;
+      return (this.project.equals(that.project)) && (this.feed.equals(that.feed));
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    int h = 1;
+    h *= 1000003;
+    h ^= project.hashCode();
+    h *= 1000003;
+    h ^= feed.hashCode();
+    return h;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOrBuilder.java
new file mode 100644
index 000000000000..63f1f8ada413
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOrBuilder.java
@@ -0,0 +1,232 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface FeedOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.Feed)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The format will be
+   * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+   * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+   * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+   * The client-assigned feed identifier must be unique within the parent
+   * project/folder/organization.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  java.lang.String getName();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The format will be
+   * projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+   * folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+   * organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+   * The client-assigned feed identifier must be unique within the parent
+   * project/folder/organization.
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  com.google.protobuf.ByteString getNameBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  java.util.List<java.lang.String> getAssetNamesList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  int getAssetNamesCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  java.lang.String getAssetNames(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of the full names of the assets to receive updates. You must specify
+   * either or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed. For
+   * example:
+   * `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+   * See [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more info.
+   * </pre>
+   *
+   * <code>repeated string asset_names = 2;</code>
+   */
+  com.google.protobuf.ByteString getAssetNamesBytes(int index);
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  java.util.List<java.lang.String> getAssetTypesList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  int getAssetTypesCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  java.lang.String getAssetTypes(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of types of the assets to receive updates. You must specify either
+   * or both of asset_names and asset_types. Only asset updates matching
+   * specified asset_names and asset_types are exported to the feed.
+   * For example:
+   * "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+   * Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+   * for all supported asset types.
+   * </pre>
+   *
+   * <code>repeated string asset_types = 3;</code>
+   */
+  com.google.protobuf.ByteString getAssetTypesBytes(int index);
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name and
+   * type will be returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  int getContentTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * Asset content type. If not specified, no content but the asset name and
+   * type will be returned.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.ContentType content_type = 4;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.ContentType getContentType();
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  boolean hasFeedOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.FeedOutputConfig getFeedOutputConfig();
+  /**
+   *
+   *
+   * <pre>
+   * Required. Feed output configuration defining where the asset updates are
+   * published to.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.FeedOutputConfig feed_output_config = 5;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder getFeedOutputConfigOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfig.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfig.java
new file mode 100644
index 000000000000..a300351e1d30
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfig.java
@@ -0,0 +1,802 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Output configuration for asset feed destination.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.FeedOutputConfig}
+ */
+public final class FeedOutputConfig extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.FeedOutputConfig)
+    FeedOutputConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use FeedOutputConfig.newBuilder() to construct.
+  private FeedOutputConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private FeedOutputConfig() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private FeedOutputConfig(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder subBuilder = null;
+              if (destinationCase_ == 1) {
+                subBuilder =
+                    ((com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_).toBuilder();
+              }
+              destination_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.PubsubDestination.parser(),
+                      extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(
+                    (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_);
+                destination_ = subBuilder.buildPartial();
+              }
+              destinationCase_ = 1;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig.class,
+            com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder.class);
+  }
+
+  private int destinationCase_ = 0;
+  private java.lang.Object destination_;
+
+  public enum DestinationCase implements com.google.protobuf.Internal.EnumLite {
+    PUBSUB_DESTINATION(1),
+    DESTINATION_NOT_SET(0);
+    private final int value;
+
+    private DestinationCase(int value) {
+      this.value = value;
+    }
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static DestinationCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static DestinationCase forNumber(int value) {
+      switch (value) {
+        case 1:
+          return PUBSUB_DESTINATION;
+        case 0:
+          return DESTINATION_NOT_SET;
+        default:
+          return null;
+      }
+    }
+
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public DestinationCase getDestinationCase() {
+    return DestinationCase.forNumber(destinationCase_);
+  }
+
+  public static final int PUBSUB_DESTINATION_FIELD_NUMBER = 1;
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  public boolean hasPubsubDestination() {
+    return destinationCase_ == 1;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.PubsubDestination getPubsubDestination() {
+    if (destinationCase_ == 1) {
+      return (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder
+      getPubsubDestinationOrBuilder() {
+    if (destinationCase_ == 1) {
+      return (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (destinationCase_ == 1) {
+      output.writeMessage(1, (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (destinationCase_ == 1) {
+      size +=
+          com.google.protobuf.CodedOutputStream.computeMessageSize(
+              1, (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.FeedOutputConfig)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.FeedOutputConfig other =
+        (com.google.cloud.asset.v1p2beta1.FeedOutputConfig) obj;
+
+    if (!getDestinationCase().equals(other.getDestinationCase())) return false;
+    switch (destinationCase_) {
+      case 1:
+        if (!getPubsubDestination().equals(other.getPubsubDestination())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    switch (destinationCase_) {
+      case 1:
+        hash = (37 * hash) + PUBSUB_DESTINATION_FIELD_NUMBER;
+        hash = (53 * hash) + getPubsubDestination().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.FeedOutputConfig prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration for asset feed destination.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.FeedOutputConfig}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.FeedOutputConfig)
+      com.google.cloud.asset.v1p2beta1.FeedOutputConfigOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.FeedOutputConfig.class,
+              com.google.cloud.asset.v1p2beta1.FeedOutputConfig.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.FeedOutputConfig.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      destinationCase_ = 0;
+      destination_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_FeedOutputConfig_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfig getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.FeedOutputConfig.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfig build() {
+      com.google.cloud.asset.v1p2beta1.FeedOutputConfig result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.FeedOutputConfig buildPartial() {
+      com.google.cloud.asset.v1p2beta1.FeedOutputConfig result =
+          new com.google.cloud.asset.v1p2beta1.FeedOutputConfig(this);
+      if (destinationCase_ == 1) {
+        if (pubsubDestinationBuilder_ == null) {
+          result.destination_ = destination_;
+        } else {
+          result.destination_ = pubsubDestinationBuilder_.build();
+        }
+      }
+      result.destinationCase_ = destinationCase_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.FeedOutputConfig) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.FeedOutputConfig) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.FeedOutputConfig other) {
+      if (other == com.google.cloud.asset.v1p2beta1.FeedOutputConfig.getDefaultInstance())
+        return this;
+      switch (other.getDestinationCase()) {
+        case PUBSUB_DESTINATION:
+          {
+            mergePubsubDestination(other.getPubsubDestination());
+            break;
+          }
+        case DESTINATION_NOT_SET:
+          {
+            break;
+          }
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.FeedOutputConfig parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.FeedOutputConfig) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int destinationCase_ = 0;
+    private java.lang.Object destination_;
+
+    public DestinationCase getDestinationCase() {
+      return DestinationCase.forNumber(destinationCase_);
+    }
+
+    public Builder clearDestination() {
+      destinationCase_ = 0;
+      destination_ = null;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.PubsubDestination,
+            com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder>
+        pubsubDestinationBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public boolean hasPubsubDestination() {
+      return destinationCase_ == 1;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.PubsubDestination getPubsubDestination() {
+      if (pubsubDestinationBuilder_ == null) {
+        if (destinationCase_ == 1) {
+          return (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+      } else {
+        if (destinationCase_ == 1) {
+          return pubsubDestinationBuilder_.getMessage();
+        }
+        return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public Builder setPubsubDestination(com.google.cloud.asset.v1p2beta1.PubsubDestination value) {
+      if (pubsubDestinationBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        destination_ = value;
+        onChanged();
+      } else {
+        pubsubDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public Builder setPubsubDestination(
+        com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder builderForValue) {
+      if (pubsubDestinationBuilder_ == null) {
+        destination_ = builderForValue.build();
+        onChanged();
+      } else {
+        pubsubDestinationBuilder_.setMessage(builderForValue.build());
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public Builder mergePubsubDestination(
+        com.google.cloud.asset.v1p2beta1.PubsubDestination value) {
+      if (pubsubDestinationBuilder_ == null) {
+        if (destinationCase_ == 1
+            && destination_
+                != com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance()) {
+          destination_ =
+              com.google.cloud.asset.v1p2beta1.PubsubDestination.newBuilder(
+                      (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          destination_ = value;
+        }
+        onChanged();
+      } else {
+        if (destinationCase_ == 1) {
+          pubsubDestinationBuilder_.mergeFrom(value);
+        }
+        pubsubDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public Builder clearPubsubDestination() {
+      if (pubsubDestinationBuilder_ == null) {
+        if (destinationCase_ == 1) {
+          destinationCase_ = 0;
+          destination_ = null;
+          onChanged();
+        }
+      } else {
+        if (destinationCase_ == 1) {
+          destinationCase_ = 0;
+          destination_ = null;
+        }
+        pubsubDestinationBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder
+        getPubsubDestinationBuilder() {
+      return getPubsubDestinationFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder
+        getPubsubDestinationOrBuilder() {
+      if ((destinationCase_ == 1) && (pubsubDestinationBuilder_ != null)) {
+        return pubsubDestinationBuilder_.getMessageOrBuilder();
+      } else {
+        if (destinationCase_ == 1) {
+          return (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Pubsub.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.PubsubDestination,
+            com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder>
+        getPubsubDestinationFieldBuilder() {
+      if (pubsubDestinationBuilder_ == null) {
+        if (!(destinationCase_ == 1)) {
+          destination_ = com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+        }
+        pubsubDestinationBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.PubsubDestination,
+                com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder,
+                com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder>(
+                (com.google.cloud.asset.v1p2beta1.PubsubDestination) destination_,
+                getParentForChildren(),
+                isClean());
+        destination_ = null;
+      }
+      destinationCase_ = 1;
+      onChanged();
+      ;
+      return pubsubDestinationBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.FeedOutputConfig)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.FeedOutputConfig)
+  private static final com.google.cloud.asset.v1p2beta1.FeedOutputConfig DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.FeedOutputConfig();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.FeedOutputConfig getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<FeedOutputConfig> PARSER =
+      new com.google.protobuf.AbstractParser<FeedOutputConfig>() {
+        @java.lang.Override
+        public FeedOutputConfig parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new FeedOutputConfig(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<FeedOutputConfig> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<FeedOutputConfig> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.FeedOutputConfig getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfigOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfigOrBuilder.java
new file mode 100644
index 000000000000..5b28725bbb9e
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/FeedOutputConfigOrBuilder.java
@@ -0,0 +1,43 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface FeedOutputConfigOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.FeedOutputConfig)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  boolean hasPubsubDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.PubsubDestination getPubsubDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Pubsub.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.PubsubDestination pubsub_destination = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder getPubsubDestinationOrBuilder();
+
+  public com.google.cloud.asset.v1p2beta1.FeedOutputConfig.DestinationCase getDestinationCase();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestination.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestination.java
new file mode 100644
index 000000000000..5bd6e6bf4afa
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestination.java
@@ -0,0 +1,965 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * A Cloud Storage location.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.GcsDestination}
+ */
+public final class GcsDestination extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.GcsDestination)
+    GcsDestinationOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use GcsDestination.newBuilder() to construct.
+  private GcsDestination(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private GcsDestination() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private GcsDestination(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              objectUriCase_ = 1;
+              objectUri_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+              objectUriCase_ = 2;
+              objectUri_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_GcsDestination_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.GcsDestination.class,
+            com.google.cloud.asset.v1p2beta1.GcsDestination.Builder.class);
+  }
+
+  private int objectUriCase_ = 0;
+  private java.lang.Object objectUri_;
+
+  public enum ObjectUriCase implements com.google.protobuf.Internal.EnumLite {
+    URI(1),
+    URI_PREFIX(2),
+    OBJECTURI_NOT_SET(0);
+    private final int value;
+
+    private ObjectUriCase(int value) {
+      this.value = value;
+    }
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static ObjectUriCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static ObjectUriCase forNumber(int value) {
+      switch (value) {
+        case 1:
+          return URI;
+        case 2:
+          return URI_PREFIX;
+        case 0:
+          return OBJECTURI_NOT_SET;
+        default:
+          return null;
+      }
+    }
+
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public ObjectUriCase getObjectUriCase() {
+    return ObjectUriCase.forNumber(objectUriCase_);
+  }
+
+  public static final int URI_FIELD_NUMBER = 1;
+  /**
+   *
+   *
+   * <pre>
+   * The uri of the Cloud Storage object. It's the same uri that is used by
+   * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+   * Editing Object
+   * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+   * for more information.
+   * </pre>
+   *
+   * <code>string uri = 1;</code>
+   */
+  public java.lang.String getUri() {
+    java.lang.Object ref = "";
+    if (objectUriCase_ == 1) {
+      ref = objectUri_;
+    }
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      if (objectUriCase_ == 1) {
+        objectUri_ = s;
+      }
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The uri of the Cloud Storage object. It's the same uri that is used by
+   * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+   * Editing Object
+   * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+   * for more information.
+   * </pre>
+   *
+   * <code>string uri = 1;</code>
+   */
+  public com.google.protobuf.ByteString getUriBytes() {
+    java.lang.Object ref = "";
+    if (objectUriCase_ == 1) {
+      ref = objectUri_;
+    }
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      if (objectUriCase_ == 1) {
+        objectUri_ = b;
+      }
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int URI_PREFIX_FIELD_NUMBER = 2;
+  /**
+   *
+   *
+   * <pre>
+   * The uri prefix of all generated Cloud Storage objects. For example:
+   * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+   * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+   * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+   * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+   * the first shard of output objects containing all
+   * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+   * returned if file with the same name "gs://bucket_name/object_name_prefix"
+   * already exists.
+   * </pre>
+   *
+   * <code>string uri_prefix = 2;</code>
+   */
+  public java.lang.String getUriPrefix() {
+    java.lang.Object ref = "";
+    if (objectUriCase_ == 2) {
+      ref = objectUri_;
+    }
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      if (objectUriCase_ == 2) {
+        objectUri_ = s;
+      }
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The uri prefix of all generated Cloud Storage objects. For example:
+   * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+   * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+   * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+   * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+   * the first shard of output objects containing all
+   * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+   * returned if file with the same name "gs://bucket_name/object_name_prefix"
+   * already exists.
+   * </pre>
+   *
+   * <code>string uri_prefix = 2;</code>
+   */
+  public com.google.protobuf.ByteString getUriPrefixBytes() {
+    java.lang.Object ref = "";
+    if (objectUriCase_ == 2) {
+      ref = objectUri_;
+    }
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      if (objectUriCase_ == 2) {
+        objectUri_ = b;
+      }
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (objectUriCase_ == 1) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, objectUri_);
+    }
+    if (objectUriCase_ == 2) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, objectUri_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (objectUriCase_ == 1) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, objectUri_);
+    }
+    if (objectUriCase_ == 2) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, objectUri_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.GcsDestination)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.GcsDestination other =
+        (com.google.cloud.asset.v1p2beta1.GcsDestination) obj;
+
+    if (!getObjectUriCase().equals(other.getObjectUriCase())) return false;
+    switch (objectUriCase_) {
+      case 1:
+        if (!getUri().equals(other.getUri())) return false;
+        break;
+      case 2:
+        if (!getUriPrefix().equals(other.getUriPrefix())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    switch (objectUriCase_) {
+      case 1:
+        hash = (37 * hash) + URI_FIELD_NUMBER;
+        hash = (53 * hash) + getUri().hashCode();
+        break;
+      case 2:
+        hash = (37 * hash) + URI_PREFIX_FIELD_NUMBER;
+        hash = (53 * hash) + getUriPrefix().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.GcsDestination prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A Cloud Storage location.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.GcsDestination}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.GcsDestination)
+      com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GcsDestination_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.GcsDestination.class,
+              com.google.cloud.asset.v1p2beta1.GcsDestination.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.GcsDestination.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      objectUriCase_ = 0;
+      objectUri_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GcsDestination_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GcsDestination getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GcsDestination build() {
+      com.google.cloud.asset.v1p2beta1.GcsDestination result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GcsDestination buildPartial() {
+      com.google.cloud.asset.v1p2beta1.GcsDestination result =
+          new com.google.cloud.asset.v1p2beta1.GcsDestination(this);
+      if (objectUriCase_ == 1) {
+        result.objectUri_ = objectUri_;
+      }
+      if (objectUriCase_ == 2) {
+        result.objectUri_ = objectUri_;
+      }
+      result.objectUriCase_ = objectUriCase_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.GcsDestination) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.GcsDestination) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.GcsDestination other) {
+      if (other == com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance())
+        return this;
+      switch (other.getObjectUriCase()) {
+        case URI:
+          {
+            objectUriCase_ = 1;
+            objectUri_ = other.objectUri_;
+            onChanged();
+            break;
+          }
+        case URI_PREFIX:
+          {
+            objectUriCase_ = 2;
+            objectUri_ = other.objectUri_;
+            onChanged();
+            break;
+          }
+        case OBJECTURI_NOT_SET:
+          {
+            break;
+          }
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.GcsDestination parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.GcsDestination) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int objectUriCase_ = 0;
+    private java.lang.Object objectUri_;
+
+    public ObjectUriCase getObjectUriCase() {
+      return ObjectUriCase.forNumber(objectUriCase_);
+    }
+
+    public Builder clearObjectUri() {
+      objectUriCase_ = 0;
+      objectUri_ = null;
+      onChanged();
+      return this;
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * The uri of the Cloud Storage object. It's the same uri that is used by
+     * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+     * Editing Object
+     * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+     * for more information.
+     * </pre>
+     *
+     * <code>string uri = 1;</code>
+     */
+    public java.lang.String getUri() {
+      java.lang.Object ref = "";
+      if (objectUriCase_ == 1) {
+        ref = objectUri_;
+      }
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (objectUriCase_ == 1) {
+          objectUri_ = s;
+        }
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri of the Cloud Storage object. It's the same uri that is used by
+     * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+     * Editing Object
+     * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+     * for more information.
+     * </pre>
+     *
+     * <code>string uri = 1;</code>
+     */
+    public com.google.protobuf.ByteString getUriBytes() {
+      java.lang.Object ref = "";
+      if (objectUriCase_ == 1) {
+        ref = objectUri_;
+      }
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        if (objectUriCase_ == 1) {
+          objectUri_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri of the Cloud Storage object. It's the same uri that is used by
+     * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+     * Editing Object
+     * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+     * for more information.
+     * </pre>
+     *
+     * <code>string uri = 1;</code>
+     */
+    public Builder setUri(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      objectUriCase_ = 1;
+      objectUri_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri of the Cloud Storage object. It's the same uri that is used by
+     * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+     * Editing Object
+     * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+     * for more information.
+     * </pre>
+     *
+     * <code>string uri = 1;</code>
+     */
+    public Builder clearUri() {
+      if (objectUriCase_ == 1) {
+        objectUriCase_ = 0;
+        objectUri_ = null;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri of the Cloud Storage object. It's the same uri that is used by
+     * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+     * Editing Object
+     * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+     * for more information.
+     * </pre>
+     *
+     * <code>string uri = 1;</code>
+     */
+    public Builder setUriBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      objectUriCase_ = 1;
+      objectUri_ = value;
+      onChanged();
+      return this;
+    }
+
+    /**
+     *
+     *
+     * <pre>
+     * The uri prefix of all generated Cloud Storage objects. For example:
+     * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+     * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+     * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+     * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+     * the first shard of output objects containing all
+     * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+     * returned if file with the same name "gs://bucket_name/object_name_prefix"
+     * already exists.
+     * </pre>
+     *
+     * <code>string uri_prefix = 2;</code>
+     */
+    public java.lang.String getUriPrefix() {
+      java.lang.Object ref = "";
+      if (objectUriCase_ == 2) {
+        ref = objectUri_;
+      }
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (objectUriCase_ == 2) {
+          objectUri_ = s;
+        }
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri prefix of all generated Cloud Storage objects. For example:
+     * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+     * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+     * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+     * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+     * the first shard of output objects containing all
+     * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+     * returned if file with the same name "gs://bucket_name/object_name_prefix"
+     * already exists.
+     * </pre>
+     *
+     * <code>string uri_prefix = 2;</code>
+     */
+    public com.google.protobuf.ByteString getUriPrefixBytes() {
+      java.lang.Object ref = "";
+      if (objectUriCase_ == 2) {
+        ref = objectUri_;
+      }
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        if (objectUriCase_ == 2) {
+          objectUri_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri prefix of all generated Cloud Storage objects. For example:
+     * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+     * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+     * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+     * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+     * the first shard of output objects containing all
+     * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+     * returned if file with the same name "gs://bucket_name/object_name_prefix"
+     * already exists.
+     * </pre>
+     *
+     * <code>string uri_prefix = 2;</code>
+     */
+    public Builder setUriPrefix(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      objectUriCase_ = 2;
+      objectUri_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri prefix of all generated Cloud Storage objects. For example:
+     * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+     * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+     * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+     * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+     * the first shard of output objects containing all
+     * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+     * returned if file with the same name "gs://bucket_name/object_name_prefix"
+     * already exists.
+     * </pre>
+     *
+     * <code>string uri_prefix = 2;</code>
+     */
+    public Builder clearUriPrefix() {
+      if (objectUriCase_ == 2) {
+        objectUriCase_ = 0;
+        objectUri_ = null;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The uri prefix of all generated Cloud Storage objects. For example:
+     * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+     * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+     * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+     * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+     * the first shard of output objects containing all
+     * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+     * returned if file with the same name "gs://bucket_name/object_name_prefix"
+     * already exists.
+     * </pre>
+     *
+     * <code>string uri_prefix = 2;</code>
+     */
+    public Builder setUriPrefixBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+      objectUriCase_ = 2;
+      objectUri_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.GcsDestination)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.GcsDestination)
+  private static final com.google.cloud.asset.v1p2beta1.GcsDestination DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.GcsDestination();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GcsDestination getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GcsDestination> PARSER =
+      new com.google.protobuf.AbstractParser<GcsDestination>() {
+        @java.lang.Override
+        public GcsDestination parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new GcsDestination(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<GcsDestination> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GcsDestination> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.GcsDestination getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestinationOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestinationOrBuilder.java
new file mode 100644
index 000000000000..f3b2e8de4a2e
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GcsDestinationOrBuilder.java
@@ -0,0 +1,78 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface GcsDestinationOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.GcsDestination)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The uri of the Cloud Storage object. It's the same uri that is used by
+   * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+   * Editing Object
+   * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+   * for more information.
+   * </pre>
+   *
+   * <code>string uri = 1;</code>
+   */
+  java.lang.String getUri();
+  /**
+   *
+   *
+   * <pre>
+   * The uri of the Cloud Storage object. It's the same uri that is used by
+   * gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+   * Editing Object
+   * Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+   * for more information.
+   * </pre>
+   *
+   * <code>string uri = 1;</code>
+   */
+  com.google.protobuf.ByteString getUriBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The uri prefix of all generated Cloud Storage objects. For example:
+   * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+   * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+   * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+   * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+   * the first shard of output objects containing all
+   * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+   * returned if file with the same name "gs://bucket_name/object_name_prefix"
+   * already exists.
+   * </pre>
+   *
+   * <code>string uri_prefix = 2;</code>
+   */
+  java.lang.String getUriPrefix();
+  /**
+   *
+   *
+   * <pre>
+   * The uri prefix of all generated Cloud Storage objects. For example:
+   * "gs://bucket_name/object_name_prefix". Each object uri is in format:
+   * "gs://bucket_name/object_name_prefix/&lt;asset type&gt;/&lt;shard number&gt; and only
+   * contains assets for that type. &lt;shard number&gt; starts from 0. For example:
+   * "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+   * the first shard of output objects containing all
+   * compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+   * returned if file with the same name "gs://bucket_name/object_name_prefix"
+   * already exists.
+   * </pre>
+   *
+   * <code>string uri_prefix = 2;</code>
+   */
+  com.google.protobuf.ByteString getUriPrefixBytes();
+
+  public com.google.cloud.asset.v1p2beta1.GcsDestination.ObjectUriCase getObjectUriCase();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequest.java
new file mode 100644
index 000000000000..4034672a60e8
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequest.java
@@ -0,0 +1,618 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Get asset feed request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.GetFeedRequest}
+ */
+public final class GetFeedRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.GetFeedRequest)
+    GetFeedRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use GetFeedRequest.newBuilder() to construct.
+  private GetFeedRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private GetFeedRequest() {
+    name_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private GetFeedRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.GetFeedRequest.class,
+            com.google.cloud.asset.v1p2beta1.GetFeedRequest.Builder.class);
+  }
+
+  public static final int NAME_FIELD_NUMBER = 1;
+  private volatile java.lang.Object name_;
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public java.lang.String getName() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      name_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  public com.google.protobuf.ByteString getNameBytes() {
+    java.lang.Object ref = name_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      name_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.GetFeedRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.GetFeedRequest other =
+        (com.google.cloud.asset.v1p2beta1.GetFeedRequest) obj;
+
+    if (!getName().equals(other.getName())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getName().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.GetFeedRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Get asset feed request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.GetFeedRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.GetFeedRequest)
+      com.google.cloud.asset.v1p2beta1.GetFeedRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.GetFeedRequest.class,
+              com.google.cloud.asset.v1p2beta1.GetFeedRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.GetFeedRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      name_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_GetFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GetFeedRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.GetFeedRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GetFeedRequest build() {
+      com.google.cloud.asset.v1p2beta1.GetFeedRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.GetFeedRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.GetFeedRequest result =
+          new com.google.cloud.asset.v1p2beta1.GetFeedRequest(this);
+      result.name_ = name_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.GetFeedRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.GetFeedRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.GetFeedRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.GetFeedRequest.getDefaultInstance())
+        return this;
+      if (!other.getName().isEmpty()) {
+        name_ = other.name_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.GetFeedRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.GetFeedRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object name_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder clearName() {
+
+      name_ = getDefaultInstance().getName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Feed and it must be in the format of:
+     * projects/project_number/feeds/feed_id
+     * folders/folder_number/feeds/feed_id
+     * organizations/organization_number/feeds/feed_id
+     * </pre>
+     *
+     * <code>string name = 1;</code>
+     */
+    public Builder setNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      name_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.GetFeedRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.GetFeedRequest)
+  private static final com.google.cloud.asset.v1p2beta1.GetFeedRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.GetFeedRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.GetFeedRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GetFeedRequest> PARSER =
+      new com.google.protobuf.AbstractParser<GetFeedRequest>() {
+        @java.lang.Override
+        public GetFeedRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new GetFeedRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<GetFeedRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GetFeedRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.GetFeedRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequestOrBuilder.java
new file mode 100644
index 000000000000..2e0920fb68a2
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/GetFeedRequestOrBuilder.java
@@ -0,0 +1,37 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface GetFeedRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.GetFeedRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  java.lang.String getName();
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Feed and it must be in the format of:
+   * projects/project_number/feeds/feed_id
+   * folders/folder_number/feeds/feed_id
+   * organizations/organization_number/feeds/feed_id
+   * </pre>
+   *
+   * <code>string name = 1;</code>
+   */
+  com.google.protobuf.ByteString getNameBytes();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequest.java
new file mode 100644
index 000000000000..1a934c0c70cb
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequest.java
@@ -0,0 +1,612 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * List asset feeds request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.ListFeedsRequest}
+ */
+public final class ListFeedsRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.ListFeedsRequest)
+    ListFeedsRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use ListFeedsRequest.newBuilder() to construct.
+  private ListFeedsRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private ListFeedsRequest() {
+    parent_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private ListFeedsRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              parent_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.ListFeedsRequest.class,
+            com.google.cloud.asset.v1p2beta1.ListFeedsRequest.Builder.class);
+  }
+
+  public static final int PARENT_FIELD_NUMBER = 1;
+  private volatile java.lang.Object parent_;
+  /**
+   *
+   *
+   * <pre>
+   * Required. The parent project/folder/organization whose feeds are to be
+   * listed. It can only be using project/folder/organization number (such as
+   * "folders/12345")", or a project ID (such as "projects/my-project-id").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public java.lang.String getParent() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      parent_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Required. The parent project/folder/organization whose feeds are to be
+   * listed. It can only be using project/folder/organization number (such as
+   * "folders/12345")", or a project ID (such as "projects/my-project-id").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  public com.google.protobuf.ByteString getParentBytes() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      parent_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getParentBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getParentBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.ListFeedsRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.ListFeedsRequest other =
+        (com.google.cloud.asset.v1p2beta1.ListFeedsRequest) obj;
+
+    if (!getParent().equals(other.getParent())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + PARENT_FIELD_NUMBER;
+    hash = (53 * hash) + getParent().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.ListFeedsRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * List asset feeds request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.ListFeedsRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.ListFeedsRequest)
+      com.google.cloud.asset.v1p2beta1.ListFeedsRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.ListFeedsRequest.class,
+              com.google.cloud.asset.v1p2beta1.ListFeedsRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.ListFeedsRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      parent_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.ListFeedsRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsRequest build() {
+      com.google.cloud.asset.v1p2beta1.ListFeedsRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.ListFeedsRequest result =
+          new com.google.cloud.asset.v1p2beta1.ListFeedsRequest(this);
+      result.parent_ = parent_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.ListFeedsRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.ListFeedsRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.ListFeedsRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.ListFeedsRequest.getDefaultInstance())
+        return this;
+      if (!other.getParent().isEmpty()) {
+        parent_ = other.parent_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.ListFeedsRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.ListFeedsRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object parent_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Required. The parent project/folder/organization whose feeds are to be
+     * listed. It can only be using project/folder/organization number (such as
+     * "folders/12345")", or a project ID (such as "projects/my-project-id").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public java.lang.String getParent() {
+      java.lang.Object ref = parent_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        parent_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The parent project/folder/organization whose feeds are to be
+     * listed. It can only be using project/folder/organization number (such as
+     * "folders/12345")", or a project ID (such as "projects/my-project-id").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public com.google.protobuf.ByteString getParentBytes() {
+      java.lang.Object ref = parent_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        parent_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The parent project/folder/organization whose feeds are to be
+     * listed. It can only be using project/folder/organization number (such as
+     * "folders/12345")", or a project ID (such as "projects/my-project-id").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParent(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The parent project/folder/organization whose feeds are to be
+     * listed. It can only be using project/folder/organization number (such as
+     * "folders/12345")", or a project ID (such as "projects/my-project-id").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder clearParent() {
+
+      parent_ = getDefaultInstance().getParent();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Required. The parent project/folder/organization whose feeds are to be
+     * listed. It can only be using project/folder/organization number (such as
+     * "folders/12345")", or a project ID (such as "projects/my-project-id").
+     * </pre>
+     *
+     * <code>string parent = 1;</code>
+     */
+    public Builder setParentBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.ListFeedsRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.ListFeedsRequest)
+  private static final com.google.cloud.asset.v1p2beta1.ListFeedsRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.ListFeedsRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<ListFeedsRequest> PARSER =
+      new com.google.protobuf.AbstractParser<ListFeedsRequest>() {
+        @java.lang.Override
+        public ListFeedsRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new ListFeedsRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<ListFeedsRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<ListFeedsRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.ListFeedsRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequestOrBuilder.java
new file mode 100644
index 000000000000..b8ec543bd55d
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsRequestOrBuilder.java
@@ -0,0 +1,35 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface ListFeedsRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.ListFeedsRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Required. The parent project/folder/organization whose feeds are to be
+   * listed. It can only be using project/folder/organization number (such as
+   * "folders/12345")", or a project ID (such as "projects/my-project-id").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  java.lang.String getParent();
+  /**
+   *
+   *
+   * <pre>
+   * Required. The parent project/folder/organization whose feeds are to be
+   * listed. It can only be using project/folder/organization number (such as
+   * "folders/12345")", or a project ID (such as "projects/my-project-id").
+   * </pre>
+   *
+   * <code>string parent = 1;</code>
+   */
+  com.google.protobuf.ByteString getParentBytes();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponse.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponse.java
new file mode 100644
index 000000000000..ffdabb8aa8cb
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponse.java
@@ -0,0 +1,922 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * List asset feeds response.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.ListFeedsResponse}
+ */
+public final class ListFeedsResponse extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.ListFeedsResponse)
+    ListFeedsResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use ListFeedsResponse.newBuilder() to construct.
+  private ListFeedsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private ListFeedsResponse() {
+    feeds_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private ListFeedsResponse(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                feeds_ = new java.util.ArrayList<com.google.cloud.asset.v1p2beta1.Feed>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              feeds_.add(
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.Feed.parser(), extensionRegistry));
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        feeds_ = java.util.Collections.unmodifiableList(feeds_);
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.ListFeedsResponse.class,
+            com.google.cloud.asset.v1p2beta1.ListFeedsResponse.Builder.class);
+  }
+
+  public static final int FEEDS_FIELD_NUMBER = 1;
+  private java.util.List<com.google.cloud.asset.v1p2beta1.Feed> feeds_;
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  public java.util.List<com.google.cloud.asset.v1p2beta1.Feed> getFeedsList() {
+    return feeds_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  public java.util.List<? extends com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+      getFeedsOrBuilderList() {
+    return feeds_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  public int getFeedsCount() {
+    return feeds_.size();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.Feed getFeeds(int index) {
+    return feeds_.get(index);
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedsOrBuilder(int index) {
+    return feeds_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    for (int i = 0; i < feeds_.size(); i++) {
+      output.writeMessage(1, feeds_.get(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    for (int i = 0; i < feeds_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, feeds_.get(i));
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.ListFeedsResponse)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.ListFeedsResponse other =
+        (com.google.cloud.asset.v1p2beta1.ListFeedsResponse) obj;
+
+    if (!getFeedsList().equals(other.getFeedsList())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getFeedsCount() > 0) {
+      hash = (37 * hash) + FEEDS_FIELD_NUMBER;
+      hash = (53 * hash) + getFeedsList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.ListFeedsResponse prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * List asset feeds response.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.ListFeedsResponse}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.ListFeedsResponse)
+      com.google.cloud.asset.v1p2beta1.ListFeedsResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.ListFeedsResponse.class,
+              com.google.cloud.asset.v1p2beta1.ListFeedsResponse.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.ListFeedsResponse.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+        getFeedsFieldBuilder();
+      }
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (feedsBuilder_ == null) {
+        feeds_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      } else {
+        feedsBuilder_.clear();
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_ListFeedsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsResponse getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.ListFeedsResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsResponse build() {
+      com.google.cloud.asset.v1p2beta1.ListFeedsResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.ListFeedsResponse buildPartial() {
+      com.google.cloud.asset.v1p2beta1.ListFeedsResponse result =
+          new com.google.cloud.asset.v1p2beta1.ListFeedsResponse(this);
+      int from_bitField0_ = bitField0_;
+      if (feedsBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          feeds_ = java.util.Collections.unmodifiableList(feeds_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.feeds_ = feeds_;
+      } else {
+        result.feeds_ = feedsBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.ListFeedsResponse) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.ListFeedsResponse) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.ListFeedsResponse other) {
+      if (other == com.google.cloud.asset.v1p2beta1.ListFeedsResponse.getDefaultInstance())
+        return this;
+      if (feedsBuilder_ == null) {
+        if (!other.feeds_.isEmpty()) {
+          if (feeds_.isEmpty()) {
+            feeds_ = other.feeds_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureFeedsIsMutable();
+            feeds_.addAll(other.feeds_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.feeds_.isEmpty()) {
+          if (feedsBuilder_.isEmpty()) {
+            feedsBuilder_.dispose();
+            feedsBuilder_ = null;
+            feeds_ = other.feeds_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            feedsBuilder_ =
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
+                    ? getFeedsFieldBuilder()
+                    : null;
+          } else {
+            feedsBuilder_.addAllMessages(other.feeds_);
+          }
+        }
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.ListFeedsResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.ListFeedsResponse) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.util.List<com.google.cloud.asset.v1p2beta1.Feed> feeds_ =
+        java.util.Collections.emptyList();
+
+    private void ensureFeedsIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        feeds_ = new java.util.ArrayList<com.google.cloud.asset.v1p2beta1.Feed>(feeds_);
+        bitField0_ |= 0x00000001;
+      }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        feedsBuilder_;
+
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public java.util.List<com.google.cloud.asset.v1p2beta1.Feed> getFeedsList() {
+      if (feedsBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(feeds_);
+      } else {
+        return feedsBuilder_.getMessageList();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public int getFeedsCount() {
+      if (feedsBuilder_ == null) {
+        return feeds_.size();
+      } else {
+        return feedsBuilder_.getCount();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed getFeeds(int index) {
+      if (feedsBuilder_ == null) {
+        return feeds_.get(index);
+      } else {
+        return feedsBuilder_.getMessage(index);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder setFeeds(int index, com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureFeedsIsMutable();
+        feeds_.set(index, value);
+        onChanged();
+      } else {
+        feedsBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder setFeeds(
+        int index, com.google.cloud.asset.v1p2beta1.Feed.Builder builderForValue) {
+      if (feedsBuilder_ == null) {
+        ensureFeedsIsMutable();
+        feeds_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        feedsBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder addFeeds(com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureFeedsIsMutable();
+        feeds_.add(value);
+        onChanged();
+      } else {
+        feedsBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder addFeeds(int index, com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureFeedsIsMutable();
+        feeds_.add(index, value);
+        onChanged();
+      } else {
+        feedsBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder addFeeds(com.google.cloud.asset.v1p2beta1.Feed.Builder builderForValue) {
+      if (feedsBuilder_ == null) {
+        ensureFeedsIsMutable();
+        feeds_.add(builderForValue.build());
+        onChanged();
+      } else {
+        feedsBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder addFeeds(
+        int index, com.google.cloud.asset.v1p2beta1.Feed.Builder builderForValue) {
+      if (feedsBuilder_ == null) {
+        ensureFeedsIsMutable();
+        feeds_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        feedsBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder addAllFeeds(
+        java.lang.Iterable<? extends com.google.cloud.asset.v1p2beta1.Feed> values) {
+      if (feedsBuilder_ == null) {
+        ensureFeedsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, feeds_);
+        onChanged();
+      } else {
+        feedsBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder clearFeeds() {
+      if (feedsBuilder_ == null) {
+        feeds_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        feedsBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public Builder removeFeeds(int index) {
+      if (feedsBuilder_ == null) {
+        ensureFeedsIsMutable();
+        feeds_.remove(index);
+        onChanged();
+      } else {
+        feedsBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed.Builder getFeedsBuilder(int index) {
+      return getFeedsFieldBuilder().getBuilder(index);
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedsOrBuilder(int index) {
+      if (feedsBuilder_ == null) {
+        return feeds_.get(index);
+      } else {
+        return feedsBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public java.util.List<? extends com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        getFeedsOrBuilderList() {
+      if (feedsBuilder_ != null) {
+        return feedsBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(feeds_);
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed.Builder addFeedsBuilder() {
+      return getFeedsFieldBuilder()
+          .addBuilder(com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance());
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed.Builder addFeedsBuilder(int index) {
+      return getFeedsFieldBuilder()
+          .addBuilder(index, com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance());
+    }
+    /**
+     *
+     *
+     * <pre>
+     * A list of feeds.
+     * </pre>
+     *
+     * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+     */
+    public java.util.List<com.google.cloud.asset.v1p2beta1.Feed.Builder> getFeedsBuilderList() {
+      return getFeedsFieldBuilder().getBuilderList();
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        getFeedsFieldBuilder() {
+      if (feedsBuilder_ == null) {
+        feedsBuilder_ =
+            new com.google.protobuf.RepeatedFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.Feed,
+                com.google.cloud.asset.v1p2beta1.Feed.Builder,
+                com.google.cloud.asset.v1p2beta1.FeedOrBuilder>(
+                feeds_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+        feeds_ = null;
+      }
+      return feedsBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.ListFeedsResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.ListFeedsResponse)
+  private static final com.google.cloud.asset.v1p2beta1.ListFeedsResponse DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.ListFeedsResponse();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.ListFeedsResponse getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<ListFeedsResponse> PARSER =
+      new com.google.protobuf.AbstractParser<ListFeedsResponse>() {
+        @java.lang.Override
+        public ListFeedsResponse parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new ListFeedsResponse(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<ListFeedsResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<ListFeedsResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.ListFeedsResponse getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponseOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponseOrBuilder.java
new file mode 100644
index 000000000000..47e11cb60a9a
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ListFeedsResponseOrBuilder.java
@@ -0,0 +1,61 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface ListFeedsResponseOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.ListFeedsResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  java.util.List<com.google.cloud.asset.v1p2beta1.Feed> getFeedsList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.Feed getFeeds(int index);
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  int getFeedsCount();
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  java.util.List<? extends com.google.cloud.asset.v1p2beta1.FeedOrBuilder> getFeedsOrBuilderList();
+  /**
+   *
+   *
+   * <pre>
+   * A list of feeds.
+   * </pre>
+   *
+   * <code>repeated .google.cloud.asset.v1p2beta1.Feed feeds = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedsOrBuilder(int index);
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfig.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfig.java
new file mode 100644
index 000000000000..479fa25193e0
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfig.java
@@ -0,0 +1,1133 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Output configuration for export assets destination.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.OutputConfig}
+ */
+public final class OutputConfig extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.OutputConfig)
+    OutputConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use OutputConfig.newBuilder() to construct.
+  private OutputConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private OutputConfig() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private OutputConfig(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.cloud.asset.v1p2beta1.GcsDestination.Builder subBuilder = null;
+              if (destinationCase_ == 1) {
+                subBuilder =
+                    ((com.google.cloud.asset.v1p2beta1.GcsDestination) destination_).toBuilder();
+              }
+              destination_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.GcsDestination.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(
+                    (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_);
+                destination_ = subBuilder.buildPartial();
+              }
+              destinationCase_ = 1;
+              break;
+            }
+          case 18:
+            {
+              com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder subBuilder = null;
+              if (destinationCase_ == 2) {
+                subBuilder =
+                    ((com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_)
+                        .toBuilder();
+              }
+              destination_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.BigQueryDestination.parser(),
+                      extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(
+                    (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_);
+                destination_ = subBuilder.buildPartial();
+              }
+              destinationCase_ = 2;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_OutputConfig_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.OutputConfig.class,
+            com.google.cloud.asset.v1p2beta1.OutputConfig.Builder.class);
+  }
+
+  private int destinationCase_ = 0;
+  private java.lang.Object destination_;
+
+  public enum DestinationCase implements com.google.protobuf.Internal.EnumLite {
+    GCS_DESTINATION(1),
+    BIGQUERY_DESTINATION(2),
+    DESTINATION_NOT_SET(0);
+    private final int value;
+
+    private DestinationCase(int value) {
+      this.value = value;
+    }
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static DestinationCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static DestinationCase forNumber(int value) {
+      switch (value) {
+        case 1:
+          return GCS_DESTINATION;
+        case 2:
+          return BIGQUERY_DESTINATION;
+        case 0:
+          return DESTINATION_NOT_SET;
+        default:
+          return null;
+      }
+    }
+
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public DestinationCase getDestinationCase() {
+    return DestinationCase.forNumber(destinationCase_);
+  }
+
+  public static final int GCS_DESTINATION_FIELD_NUMBER = 1;
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  public boolean hasGcsDestination() {
+    return destinationCase_ == 1;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.GcsDestination getGcsDestination() {
+    if (destinationCase_ == 1) {
+      return (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder getGcsDestinationOrBuilder() {
+    if (destinationCase_ == 1) {
+      return (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+  }
+
+  public static final int BIGQUERY_DESTINATION_FIELD_NUMBER = 2;
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  public boolean hasBigqueryDestination() {
+    return destinationCase_ == 2;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.BigQueryDestination getBigqueryDestination() {
+    if (destinationCase_ == 2) {
+      return (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder
+      getBigqueryDestinationOrBuilder() {
+    if (destinationCase_ == 2) {
+      return (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_;
+    }
+    return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (destinationCase_ == 1) {
+      output.writeMessage(1, (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_);
+    }
+    if (destinationCase_ == 2) {
+      output.writeMessage(2, (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (destinationCase_ == 1) {
+      size +=
+          com.google.protobuf.CodedOutputStream.computeMessageSize(
+              1, (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_);
+    }
+    if (destinationCase_ == 2) {
+      size +=
+          com.google.protobuf.CodedOutputStream.computeMessageSize(
+              2, (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.OutputConfig)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.OutputConfig other =
+        (com.google.cloud.asset.v1p2beta1.OutputConfig) obj;
+
+    if (!getDestinationCase().equals(other.getDestinationCase())) return false;
+    switch (destinationCase_) {
+      case 1:
+        if (!getGcsDestination().equals(other.getGcsDestination())) return false;
+        break;
+      case 2:
+        if (!getBigqueryDestination().equals(other.getBigqueryDestination())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    switch (destinationCase_) {
+      case 1:
+        hash = (37 * hash) + GCS_DESTINATION_FIELD_NUMBER;
+        hash = (53 * hash) + getGcsDestination().hashCode();
+        break;
+      case 2:
+        hash = (37 * hash) + BIGQUERY_DESTINATION_FIELD_NUMBER;
+        hash = (53 * hash) + getBigqueryDestination().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.OutputConfig prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output configuration for export assets destination.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.OutputConfig}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.OutputConfig)
+      com.google.cloud.asset.v1p2beta1.OutputConfigOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_OutputConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.OutputConfig.class,
+              com.google.cloud.asset.v1p2beta1.OutputConfig.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.OutputConfig.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      destinationCase_ = 0;
+      destination_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_OutputConfig_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.OutputConfig getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.OutputConfig build() {
+      com.google.cloud.asset.v1p2beta1.OutputConfig result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.OutputConfig buildPartial() {
+      com.google.cloud.asset.v1p2beta1.OutputConfig result =
+          new com.google.cloud.asset.v1p2beta1.OutputConfig(this);
+      if (destinationCase_ == 1) {
+        if (gcsDestinationBuilder_ == null) {
+          result.destination_ = destination_;
+        } else {
+          result.destination_ = gcsDestinationBuilder_.build();
+        }
+      }
+      if (destinationCase_ == 2) {
+        if (bigqueryDestinationBuilder_ == null) {
+          result.destination_ = destination_;
+        } else {
+          result.destination_ = bigqueryDestinationBuilder_.build();
+        }
+      }
+      result.destinationCase_ = destinationCase_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.OutputConfig) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.OutputConfig) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.OutputConfig other) {
+      if (other == com.google.cloud.asset.v1p2beta1.OutputConfig.getDefaultInstance()) return this;
+      switch (other.getDestinationCase()) {
+        case GCS_DESTINATION:
+          {
+            mergeGcsDestination(other.getGcsDestination());
+            break;
+          }
+        case BIGQUERY_DESTINATION:
+          {
+            mergeBigqueryDestination(other.getBigqueryDestination());
+            break;
+          }
+        case DESTINATION_NOT_SET:
+          {
+            break;
+          }
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.OutputConfig parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.OutputConfig) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int destinationCase_ = 0;
+    private java.lang.Object destination_;
+
+    public DestinationCase getDestinationCase() {
+      return DestinationCase.forNumber(destinationCase_);
+    }
+
+    public Builder clearDestination() {
+      destinationCase_ = 0;
+      destination_ = null;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.GcsDestination,
+            com.google.cloud.asset.v1p2beta1.GcsDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder>
+        gcsDestinationBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public boolean hasGcsDestination() {
+      return destinationCase_ == 1;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.GcsDestination getGcsDestination() {
+      if (gcsDestinationBuilder_ == null) {
+        if (destinationCase_ == 1) {
+          return (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+      } else {
+        if (destinationCase_ == 1) {
+          return gcsDestinationBuilder_.getMessage();
+        }
+        return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public Builder setGcsDestination(com.google.cloud.asset.v1p2beta1.GcsDestination value) {
+      if (gcsDestinationBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        destination_ = value;
+        onChanged();
+      } else {
+        gcsDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public Builder setGcsDestination(
+        com.google.cloud.asset.v1p2beta1.GcsDestination.Builder builderForValue) {
+      if (gcsDestinationBuilder_ == null) {
+        destination_ = builderForValue.build();
+        onChanged();
+      } else {
+        gcsDestinationBuilder_.setMessage(builderForValue.build());
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public Builder mergeGcsDestination(com.google.cloud.asset.v1p2beta1.GcsDestination value) {
+      if (gcsDestinationBuilder_ == null) {
+        if (destinationCase_ == 1
+            && destination_
+                != com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance()) {
+          destination_ =
+              com.google.cloud.asset.v1p2beta1.GcsDestination.newBuilder(
+                      (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          destination_ = value;
+        }
+        onChanged();
+      } else {
+        if (destinationCase_ == 1) {
+          gcsDestinationBuilder_.mergeFrom(value);
+        }
+        gcsDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 1;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public Builder clearGcsDestination() {
+      if (gcsDestinationBuilder_ == null) {
+        if (destinationCase_ == 1) {
+          destinationCase_ = 0;
+          destination_ = null;
+          onChanged();
+        }
+      } else {
+        if (destinationCase_ == 1) {
+          destinationCase_ = 0;
+          destination_ = null;
+        }
+        gcsDestinationBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.GcsDestination.Builder getGcsDestinationBuilder() {
+      return getGcsDestinationFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder getGcsDestinationOrBuilder() {
+      if ((destinationCase_ == 1) && (gcsDestinationBuilder_ != null)) {
+        return gcsDestinationBuilder_.getMessageOrBuilder();
+      } else {
+        if (destinationCase_ == 1) {
+          return (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Cloud Storage.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.GcsDestination,
+            com.google.cloud.asset.v1p2beta1.GcsDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder>
+        getGcsDestinationFieldBuilder() {
+      if (gcsDestinationBuilder_ == null) {
+        if (!(destinationCase_ == 1)) {
+          destination_ = com.google.cloud.asset.v1p2beta1.GcsDestination.getDefaultInstance();
+        }
+        gcsDestinationBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.GcsDestination,
+                com.google.cloud.asset.v1p2beta1.GcsDestination.Builder,
+                com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder>(
+                (com.google.cloud.asset.v1p2beta1.GcsDestination) destination_,
+                getParentForChildren(),
+                isClean());
+        destination_ = null;
+      }
+      destinationCase_ = 1;
+      onChanged();
+      ;
+      return gcsDestinationBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination,
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder>
+        bigqueryDestinationBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public boolean hasBigqueryDestination() {
+      return destinationCase_ == 2;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestination getBigqueryDestination() {
+      if (bigqueryDestinationBuilder_ == null) {
+        if (destinationCase_ == 2) {
+          return (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+      } else {
+        if (destinationCase_ == 2) {
+          return bigqueryDestinationBuilder_.getMessage();
+        }
+        return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public Builder setBigqueryDestination(
+        com.google.cloud.asset.v1p2beta1.BigQueryDestination value) {
+      if (bigqueryDestinationBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        destination_ = value;
+        onChanged();
+      } else {
+        bigqueryDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 2;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public Builder setBigqueryDestination(
+        com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder builderForValue) {
+      if (bigqueryDestinationBuilder_ == null) {
+        destination_ = builderForValue.build();
+        onChanged();
+      } else {
+        bigqueryDestinationBuilder_.setMessage(builderForValue.build());
+      }
+      destinationCase_ = 2;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public Builder mergeBigqueryDestination(
+        com.google.cloud.asset.v1p2beta1.BigQueryDestination value) {
+      if (bigqueryDestinationBuilder_ == null) {
+        if (destinationCase_ == 2
+            && destination_
+                != com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance()) {
+          destination_ =
+              com.google.cloud.asset.v1p2beta1.BigQueryDestination.newBuilder(
+                      (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          destination_ = value;
+        }
+        onChanged();
+      } else {
+        if (destinationCase_ == 2) {
+          bigqueryDestinationBuilder_.mergeFrom(value);
+        }
+        bigqueryDestinationBuilder_.setMessage(value);
+      }
+      destinationCase_ = 2;
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public Builder clearBigqueryDestination() {
+      if (bigqueryDestinationBuilder_ == null) {
+        if (destinationCase_ == 2) {
+          destinationCase_ = 0;
+          destination_ = null;
+          onChanged();
+        }
+      } else {
+        if (destinationCase_ == 2) {
+          destinationCase_ = 0;
+          destination_ = null;
+        }
+        bigqueryDestinationBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder
+        getBigqueryDestinationBuilder() {
+      return getBigqueryDestinationFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder
+        getBigqueryDestinationOrBuilder() {
+      if ((destinationCase_ == 2) && (bigqueryDestinationBuilder_ != null)) {
+        return bigqueryDestinationBuilder_.getMessageOrBuilder();
+      } else {
+        if (destinationCase_ == 2) {
+          return (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_;
+        }
+        return com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Destination on Bigquery. The output table stores the fields in asset
+     * proto as columns in BigQuery. The resource/iam_policy field is converted
+     * to a record with each field to a column, except metadata to a single JSON
+     * string.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination,
+            com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder,
+            com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder>
+        getBigqueryDestinationFieldBuilder() {
+      if (bigqueryDestinationBuilder_ == null) {
+        if (!(destinationCase_ == 2)) {
+          destination_ = com.google.cloud.asset.v1p2beta1.BigQueryDestination.getDefaultInstance();
+        }
+        bigqueryDestinationBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.BigQueryDestination,
+                com.google.cloud.asset.v1p2beta1.BigQueryDestination.Builder,
+                com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder>(
+                (com.google.cloud.asset.v1p2beta1.BigQueryDestination) destination_,
+                getParentForChildren(),
+                isClean());
+        destination_ = null;
+      }
+      destinationCase_ = 2;
+      onChanged();
+      ;
+      return bigqueryDestinationBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.OutputConfig)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.OutputConfig)
+  private static final com.google.cloud.asset.v1p2beta1.OutputConfig DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.OutputConfig();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.OutputConfig getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<OutputConfig> PARSER =
+      new com.google.protobuf.AbstractParser<OutputConfig>() {
+        @java.lang.Override
+        public OutputConfig parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new OutputConfig(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<OutputConfig> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<OutputConfig> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.OutputConfig getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfigOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfigOrBuilder.java
new file mode 100644
index 000000000000..4b5539127fe3
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/OutputConfigOrBuilder.java
@@ -0,0 +1,83 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface OutputConfigOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.OutputConfig)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  boolean hasGcsDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.GcsDestination getGcsDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Cloud Storage.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.GcsDestination gcs_destination = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.GcsDestinationOrBuilder getGcsDestinationOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  boolean hasBigqueryDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.BigQueryDestination getBigqueryDestination();
+  /**
+   *
+   *
+   * <pre>
+   * Destination on Bigquery. The output table stores the fields in asset
+   * proto as columns in BigQuery. The resource/iam_policy field is converted
+   * to a record with each field to a column, except metadata to a single JSON
+   * string.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.BigQueryDestination bigquery_destination = 2;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.BigQueryDestinationOrBuilder getBigqueryDestinationOrBuilder();
+
+  public com.google.cloud.asset.v1p2beta1.OutputConfig.DestinationCase getDestinationCase();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestination.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestination.java
new file mode 100644
index 000000000000..1f3fa3584b24
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestination.java
@@ -0,0 +1,605 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * A Cloud Pubsub destination.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.PubsubDestination}
+ */
+public final class PubsubDestination extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.PubsubDestination)
+    PubsubDestinationOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use PubsubDestination.newBuilder() to construct.
+  private PubsubDestination(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private PubsubDestination() {
+    topic_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private PubsubDestination(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              topic_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.PubsubDestination.class,
+            com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder.class);
+  }
+
+  public static final int TOPIC_FIELD_NUMBER = 1;
+  private volatile java.lang.Object topic_;
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Cloud Pub/Sub topic to publish to.
+   * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   */
+  public java.lang.String getTopic() {
+    java.lang.Object ref = topic_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      topic_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Cloud Pub/Sub topic to publish to.
+   * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   */
+  public com.google.protobuf.ByteString getTopicBytes() {
+    java.lang.Object ref = topic_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      topic_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getTopicBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, topic_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getTopicBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, topic_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.PubsubDestination)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.PubsubDestination other =
+        (com.google.cloud.asset.v1p2beta1.PubsubDestination) obj;
+
+    if (!getTopic().equals(other.getTopic())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + TOPIC_FIELD_NUMBER;
+    hash = (53 * hash) + getTopic().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.PubsubDestination prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A Cloud Pubsub destination.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.PubsubDestination}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.PubsubDestination)
+      com.google.cloud.asset.v1p2beta1.PubsubDestinationOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.PubsubDestination.class,
+              com.google.cloud.asset.v1p2beta1.PubsubDestination.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.PubsubDestination.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      topic_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_PubsubDestination_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.PubsubDestination getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.PubsubDestination build() {
+      com.google.cloud.asset.v1p2beta1.PubsubDestination result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.PubsubDestination buildPartial() {
+      com.google.cloud.asset.v1p2beta1.PubsubDestination result =
+          new com.google.cloud.asset.v1p2beta1.PubsubDestination(this);
+      result.topic_ = topic_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.PubsubDestination) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.PubsubDestination) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.PubsubDestination other) {
+      if (other == com.google.cloud.asset.v1p2beta1.PubsubDestination.getDefaultInstance())
+        return this;
+      if (!other.getTopic().isEmpty()) {
+        topic_ = other.topic_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.PubsubDestination parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.PubsubDestination) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object topic_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Cloud Pub/Sub topic to publish to.
+     * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     */
+    public java.lang.String getTopic() {
+      java.lang.Object ref = topic_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        topic_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Cloud Pub/Sub topic to publish to.
+     * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     */
+    public com.google.protobuf.ByteString getTopicBytes() {
+      java.lang.Object ref = topic_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        topic_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Cloud Pub/Sub topic to publish to.
+     * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     */
+    public Builder setTopic(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      topic_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Cloud Pub/Sub topic to publish to.
+     * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     */
+    public Builder clearTopic() {
+
+      topic_ = getDefaultInstance().getTopic();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The name of the Cloud Pub/Sub topic to publish to.
+     * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     */
+    public Builder setTopicBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      topic_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.PubsubDestination)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.PubsubDestination)
+  private static final com.google.cloud.asset.v1p2beta1.PubsubDestination DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.PubsubDestination();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.PubsubDestination getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<PubsubDestination> PARSER =
+      new com.google.protobuf.AbstractParser<PubsubDestination>() {
+        @java.lang.Override
+        public PubsubDestination parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new PubsubDestination(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<PubsubDestination> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<PubsubDestination> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.PubsubDestination getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestinationOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestinationOrBuilder.java
new file mode 100644
index 000000000000..87d104b6e1c4
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/PubsubDestinationOrBuilder.java
@@ -0,0 +1,33 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface PubsubDestinationOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.PubsubDestination)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Cloud Pub/Sub topic to publish to.
+   * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   */
+  java.lang.String getTopic();
+  /**
+   *
+   *
+   * <pre>
+   * The name of the Cloud Pub/Sub topic to publish to.
+   * For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   */
+  com.google.protobuf.ByteString getTopicBytes();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Resource.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Resource.java
new file mode 100644
index 000000000000..c2362b747de4
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/Resource.java
@@ -0,0 +1,1901 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Representation of a cloud resource.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.Resource}
+ */
+public final class Resource extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.Resource)
+    ResourceOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use Resource.newBuilder() to construct.
+  private Resource(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private Resource() {
+    version_ = "";
+    discoveryDocumentUri_ = "";
+    discoveryName_ = "";
+    resourceUrl_ = "";
+    parent_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private Resource(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              version_ = s;
+              break;
+            }
+          case 18:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              discoveryDocumentUri_ = s;
+              break;
+            }
+          case 26:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              discoveryName_ = s;
+              break;
+            }
+          case 34:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceUrl_ = s;
+              break;
+            }
+          case 42:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              parent_ = s;
+              break;
+            }
+          case 50:
+            {
+              com.google.protobuf.Struct.Builder subBuilder = null;
+              if (data_ != null) {
+                subBuilder = data_.toBuilder();
+              }
+              data_ = input.readMessage(com.google.protobuf.Struct.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(data_);
+                data_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 58:
+            {
+              com.google.protobuf.Any.Builder subBuilder = null;
+              if (internalData_ != null) {
+                subBuilder = internalData_.toBuilder();
+              }
+              internalData_ =
+                  input.readMessage(com.google.protobuf.Any.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(internalData_);
+                internalData_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_Resource_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.Resource.class,
+            com.google.cloud.asset.v1p2beta1.Resource.Builder.class);
+  }
+
+  public static final int VERSION_FIELD_NUMBER = 1;
+  private volatile java.lang.Object version_;
+  /**
+   *
+   *
+   * <pre>
+   * The API version. Example: "v1".
+   * </pre>
+   *
+   * <code>string version = 1;</code>
+   */
+  public java.lang.String getVersion() {
+    java.lang.Object ref = version_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      version_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The API version. Example: "v1".
+   * </pre>
+   *
+   * <code>string version = 1;</code>
+   */
+  public com.google.protobuf.ByteString getVersionBytes() {
+    java.lang.Object ref = version_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      version_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int DISCOVERY_DOCUMENT_URI_FIELD_NUMBER = 2;
+  private volatile java.lang.Object discoveryDocumentUri_;
+  /**
+   *
+   *
+   * <pre>
+   * The URL of the discovery document containing the resource's JSON schema.
+   * For example:
+   * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+   * It will be left unspecified for resources without a discovery-based API,
+   * such as Cloud Bigtable.
+   * </pre>
+   *
+   * <code>string discovery_document_uri = 2;</code>
+   */
+  public java.lang.String getDiscoveryDocumentUri() {
+    java.lang.Object ref = discoveryDocumentUri_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      discoveryDocumentUri_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The URL of the discovery document containing the resource's JSON schema.
+   * For example:
+   * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+   * It will be left unspecified for resources without a discovery-based API,
+   * such as Cloud Bigtable.
+   * </pre>
+   *
+   * <code>string discovery_document_uri = 2;</code>
+   */
+  public com.google.protobuf.ByteString getDiscoveryDocumentUriBytes() {
+    java.lang.Object ref = discoveryDocumentUri_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      discoveryDocumentUri_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int DISCOVERY_NAME_FIELD_NUMBER = 3;
+  private volatile java.lang.Object discoveryName_;
+  /**
+   *
+   *
+   * <pre>
+   * The JSON schema name listed in the discovery document.
+   * Example: "Project". It will be left unspecified for resources (such as
+   * Cloud Bigtable) without a discovery-based API.
+   * </pre>
+   *
+   * <code>string discovery_name = 3;</code>
+   */
+  public java.lang.String getDiscoveryName() {
+    java.lang.Object ref = discoveryName_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      discoveryName_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The JSON schema name listed in the discovery document.
+   * Example: "Project". It will be left unspecified for resources (such as
+   * Cloud Bigtable) without a discovery-based API.
+   * </pre>
+   *
+   * <code>string discovery_name = 3;</code>
+   */
+  public com.google.protobuf.ByteString getDiscoveryNameBytes() {
+    java.lang.Object ref = discoveryName_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      discoveryName_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int RESOURCE_URL_FIELD_NUMBER = 4;
+  private volatile java.lang.Object resourceUrl_;
+  /**
+   *
+   *
+   * <pre>
+   * The REST URL for accessing the resource. An HTTP GET operation using this
+   * URL returns the resource itself.
+   * Example:
+   * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+   * It will be left unspecified for resources without a REST API.
+   * </pre>
+   *
+   * <code>string resource_url = 4;</code>
+   */
+  public java.lang.String getResourceUrl() {
+    java.lang.Object ref = resourceUrl_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      resourceUrl_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The REST URL for accessing the resource. An HTTP GET operation using this
+   * URL returns the resource itself.
+   * Example:
+   * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+   * It will be left unspecified for resources without a REST API.
+   * </pre>
+   *
+   * <code>string resource_url = 4;</code>
+   */
+  public com.google.protobuf.ByteString getResourceUrlBytes() {
+    java.lang.Object ref = resourceUrl_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      resourceUrl_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PARENT_FIELD_NUMBER = 5;
+  private volatile java.lang.Object parent_;
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the immediate parent of this resource. See
+   * [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+   * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+   * For example:
+   * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+   * For third-party assets, it is up to the users to define.
+   * </pre>
+   *
+   * <code>string parent = 5;</code>
+   */
+  public java.lang.String getParent() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      parent_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the immediate parent of this resource. See
+   * [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+   * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+   * For example:
+   * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+   * For third-party assets, it is up to the users to define.
+   * </pre>
+   *
+   * <code>string parent = 5;</code>
+   */
+  public com.google.protobuf.ByteString getParentBytes() {
+    java.lang.Object ref = parent_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      parent_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int DATA_FIELD_NUMBER = 6;
+  private com.google.protobuf.Struct data_;
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  public boolean hasData() {
+    return data_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  public com.google.protobuf.Struct getData() {
+    return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
+    return getData();
+  }
+
+  public static final int INTERNAL_DATA_FIELD_NUMBER = 7;
+  private com.google.protobuf.Any internalData_;
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  public boolean hasInternalData() {
+    return internalData_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  public com.google.protobuf.Any getInternalData() {
+    return internalData_ == null ? com.google.protobuf.Any.getDefaultInstance() : internalData_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  public com.google.protobuf.AnyOrBuilder getInternalDataOrBuilder() {
+    return getInternalData();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (!getVersionBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, version_);
+    }
+    if (!getDiscoveryDocumentUriBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, discoveryDocumentUri_);
+    }
+    if (!getDiscoveryNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, discoveryName_);
+    }
+    if (!getResourceUrlBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, resourceUrl_);
+    }
+    if (!getParentBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 5, parent_);
+    }
+    if (data_ != null) {
+      output.writeMessage(6, getData());
+    }
+    if (internalData_ != null) {
+      output.writeMessage(7, getInternalData());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getVersionBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, version_);
+    }
+    if (!getDiscoveryDocumentUriBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, discoveryDocumentUri_);
+    }
+    if (!getDiscoveryNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, discoveryName_);
+    }
+    if (!getResourceUrlBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, resourceUrl_);
+    }
+    if (!getParentBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, parent_);
+    }
+    if (data_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getData());
+    }
+    if (internalData_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getInternalData());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.Resource)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.Resource other =
+        (com.google.cloud.asset.v1p2beta1.Resource) obj;
+
+    if (!getVersion().equals(other.getVersion())) return false;
+    if (!getDiscoveryDocumentUri().equals(other.getDiscoveryDocumentUri())) return false;
+    if (!getDiscoveryName().equals(other.getDiscoveryName())) return false;
+    if (!getResourceUrl().equals(other.getResourceUrl())) return false;
+    if (!getParent().equals(other.getParent())) return false;
+    if (hasData() != other.hasData()) return false;
+    if (hasData()) {
+      if (!getData().equals(other.getData())) return false;
+    }
+    if (hasInternalData() != other.hasInternalData()) return false;
+    if (hasInternalData()) {
+      if (!getInternalData().equals(other.getInternalData())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + VERSION_FIELD_NUMBER;
+    hash = (53 * hash) + getVersion().hashCode();
+    hash = (37 * hash) + DISCOVERY_DOCUMENT_URI_FIELD_NUMBER;
+    hash = (53 * hash) + getDiscoveryDocumentUri().hashCode();
+    hash = (37 * hash) + DISCOVERY_NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getDiscoveryName().hashCode();
+    hash = (37 * hash) + RESOURCE_URL_FIELD_NUMBER;
+    hash = (53 * hash) + getResourceUrl().hashCode();
+    hash = (37 * hash) + PARENT_FIELD_NUMBER;
+    hash = (53 * hash) + getParent().hashCode();
+    if (hasData()) {
+      hash = (37 * hash) + DATA_FIELD_NUMBER;
+      hash = (53 * hash) + getData().hashCode();
+    }
+    if (hasInternalData()) {
+      hash = (37 * hash) + INTERNAL_DATA_FIELD_NUMBER;
+      hash = (53 * hash) + getInternalData().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.Resource prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Representation of a cloud resource.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.Resource}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.Resource)
+      com.google.cloud.asset.v1p2beta1.ResourceOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Resource_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.Resource.class,
+              com.google.cloud.asset.v1p2beta1.Resource.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.Resource.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      version_ = "";
+
+      discoveryDocumentUri_ = "";
+
+      discoveryName_ = "";
+
+      resourceUrl_ = "";
+
+      parent_ = "";
+
+      if (dataBuilder_ == null) {
+        data_ = null;
+      } else {
+        data_ = null;
+        dataBuilder_ = null;
+      }
+      if (internalDataBuilder_ == null) {
+        internalData_ = null;
+      } else {
+        internalData_ = null;
+        internalDataBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_Resource_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Resource getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.Resource.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Resource build() {
+      com.google.cloud.asset.v1p2beta1.Resource result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.Resource buildPartial() {
+      com.google.cloud.asset.v1p2beta1.Resource result =
+          new com.google.cloud.asset.v1p2beta1.Resource(this);
+      result.version_ = version_;
+      result.discoveryDocumentUri_ = discoveryDocumentUri_;
+      result.discoveryName_ = discoveryName_;
+      result.resourceUrl_ = resourceUrl_;
+      result.parent_ = parent_;
+      if (dataBuilder_ == null) {
+        result.data_ = data_;
+      } else {
+        result.data_ = dataBuilder_.build();
+      }
+      if (internalDataBuilder_ == null) {
+        result.internalData_ = internalData_;
+      } else {
+        result.internalData_ = internalDataBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.Resource) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.Resource) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.Resource other) {
+      if (other == com.google.cloud.asset.v1p2beta1.Resource.getDefaultInstance()) return this;
+      if (!other.getVersion().isEmpty()) {
+        version_ = other.version_;
+        onChanged();
+      }
+      if (!other.getDiscoveryDocumentUri().isEmpty()) {
+        discoveryDocumentUri_ = other.discoveryDocumentUri_;
+        onChanged();
+      }
+      if (!other.getDiscoveryName().isEmpty()) {
+        discoveryName_ = other.discoveryName_;
+        onChanged();
+      }
+      if (!other.getResourceUrl().isEmpty()) {
+        resourceUrl_ = other.resourceUrl_;
+        onChanged();
+      }
+      if (!other.getParent().isEmpty()) {
+        parent_ = other.parent_;
+        onChanged();
+      }
+      if (other.hasData()) {
+        mergeData(other.getData());
+      }
+      if (other.hasInternalData()) {
+        mergeInternalData(other.getInternalData());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.Resource parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.Resource) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object version_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The API version. Example: "v1".
+     * </pre>
+     *
+     * <code>string version = 1;</code>
+     */
+    public java.lang.String getVersion() {
+      java.lang.Object ref = version_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        version_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The API version. Example: "v1".
+     * </pre>
+     *
+     * <code>string version = 1;</code>
+     */
+    public com.google.protobuf.ByteString getVersionBytes() {
+      java.lang.Object ref = version_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        version_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The API version. Example: "v1".
+     * </pre>
+     *
+     * <code>string version = 1;</code>
+     */
+    public Builder setVersion(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      version_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The API version. Example: "v1".
+     * </pre>
+     *
+     * <code>string version = 1;</code>
+     */
+    public Builder clearVersion() {
+
+      version_ = getDefaultInstance().getVersion();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The API version. Example: "v1".
+     * </pre>
+     *
+     * <code>string version = 1;</code>
+     */
+    public Builder setVersionBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      version_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object discoveryDocumentUri_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The URL of the discovery document containing the resource's JSON schema.
+     * For example:
+     * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+     * It will be left unspecified for resources without a discovery-based API,
+     * such as Cloud Bigtable.
+     * </pre>
+     *
+     * <code>string discovery_document_uri = 2;</code>
+     */
+    public java.lang.String getDiscoveryDocumentUri() {
+      java.lang.Object ref = discoveryDocumentUri_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        discoveryDocumentUri_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The URL of the discovery document containing the resource's JSON schema.
+     * For example:
+     * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+     * It will be left unspecified for resources without a discovery-based API,
+     * such as Cloud Bigtable.
+     * </pre>
+     *
+     * <code>string discovery_document_uri = 2;</code>
+     */
+    public com.google.protobuf.ByteString getDiscoveryDocumentUriBytes() {
+      java.lang.Object ref = discoveryDocumentUri_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        discoveryDocumentUri_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The URL of the discovery document containing the resource's JSON schema.
+     * For example:
+     * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+     * It will be left unspecified for resources without a discovery-based API,
+     * such as Cloud Bigtable.
+     * </pre>
+     *
+     * <code>string discovery_document_uri = 2;</code>
+     */
+    public Builder setDiscoveryDocumentUri(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      discoveryDocumentUri_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The URL of the discovery document containing the resource's JSON schema.
+     * For example:
+     * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+     * It will be left unspecified for resources without a discovery-based API,
+     * such as Cloud Bigtable.
+     * </pre>
+     *
+     * <code>string discovery_document_uri = 2;</code>
+     */
+    public Builder clearDiscoveryDocumentUri() {
+
+      discoveryDocumentUri_ = getDefaultInstance().getDiscoveryDocumentUri();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The URL of the discovery document containing the resource's JSON schema.
+     * For example:
+     * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+     * It will be left unspecified for resources without a discovery-based API,
+     * such as Cloud Bigtable.
+     * </pre>
+     *
+     * <code>string discovery_document_uri = 2;</code>
+     */
+    public Builder setDiscoveryDocumentUriBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      discoveryDocumentUri_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object discoveryName_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The JSON schema name listed in the discovery document.
+     * Example: "Project". It will be left unspecified for resources (such as
+     * Cloud Bigtable) without a discovery-based API.
+     * </pre>
+     *
+     * <code>string discovery_name = 3;</code>
+     */
+    public java.lang.String getDiscoveryName() {
+      java.lang.Object ref = discoveryName_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        discoveryName_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The JSON schema name listed in the discovery document.
+     * Example: "Project". It will be left unspecified for resources (such as
+     * Cloud Bigtable) without a discovery-based API.
+     * </pre>
+     *
+     * <code>string discovery_name = 3;</code>
+     */
+    public com.google.protobuf.ByteString getDiscoveryNameBytes() {
+      java.lang.Object ref = discoveryName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        discoveryName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The JSON schema name listed in the discovery document.
+     * Example: "Project". It will be left unspecified for resources (such as
+     * Cloud Bigtable) without a discovery-based API.
+     * </pre>
+     *
+     * <code>string discovery_name = 3;</code>
+     */
+    public Builder setDiscoveryName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      discoveryName_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The JSON schema name listed in the discovery document.
+     * Example: "Project". It will be left unspecified for resources (such as
+     * Cloud Bigtable) without a discovery-based API.
+     * </pre>
+     *
+     * <code>string discovery_name = 3;</code>
+     */
+    public Builder clearDiscoveryName() {
+
+      discoveryName_ = getDefaultInstance().getDiscoveryName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The JSON schema name listed in the discovery document.
+     * Example: "Project". It will be left unspecified for resources (such as
+     * Cloud Bigtable) without a discovery-based API.
+     * </pre>
+     *
+     * <code>string discovery_name = 3;</code>
+     */
+    public Builder setDiscoveryNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      discoveryName_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object resourceUrl_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The REST URL for accessing the resource. An HTTP GET operation using this
+     * URL returns the resource itself.
+     * Example:
+     * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+     * It will be left unspecified for resources without a REST API.
+     * </pre>
+     *
+     * <code>string resource_url = 4;</code>
+     */
+    public java.lang.String getResourceUrl() {
+      java.lang.Object ref = resourceUrl_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceUrl_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The REST URL for accessing the resource. An HTTP GET operation using this
+     * URL returns the resource itself.
+     * Example:
+     * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+     * It will be left unspecified for resources without a REST API.
+     * </pre>
+     *
+     * <code>string resource_url = 4;</code>
+     */
+    public com.google.protobuf.ByteString getResourceUrlBytes() {
+      java.lang.Object ref = resourceUrl_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        resourceUrl_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The REST URL for accessing the resource. An HTTP GET operation using this
+     * URL returns the resource itself.
+     * Example:
+     * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+     * It will be left unspecified for resources without a REST API.
+     * </pre>
+     *
+     * <code>string resource_url = 4;</code>
+     */
+    public Builder setResourceUrl(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      resourceUrl_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The REST URL for accessing the resource. An HTTP GET operation using this
+     * URL returns the resource itself.
+     * Example:
+     * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+     * It will be left unspecified for resources without a REST API.
+     * </pre>
+     *
+     * <code>string resource_url = 4;</code>
+     */
+    public Builder clearResourceUrl() {
+
+      resourceUrl_ = getDefaultInstance().getResourceUrl();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The REST URL for accessing the resource. An HTTP GET operation using this
+     * URL returns the resource itself.
+     * Example:
+     * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+     * It will be left unspecified for resources without a REST API.
+     * </pre>
+     *
+     * <code>string resource_url = 4;</code>
+     */
+    public Builder setResourceUrlBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      resourceUrl_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object parent_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the immediate parent of this resource. See
+     * [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+     * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+     * For example:
+     * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+     * For third-party assets, it is up to the users to define.
+     * </pre>
+     *
+     * <code>string parent = 5;</code>
+     */
+    public java.lang.String getParent() {
+      java.lang.Object ref = parent_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        parent_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the immediate parent of this resource. See
+     * [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+     * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+     * For example:
+     * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+     * For third-party assets, it is up to the users to define.
+     * </pre>
+     *
+     * <code>string parent = 5;</code>
+     */
+    public com.google.protobuf.ByteString getParentBytes() {
+      java.lang.Object ref = parent_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        parent_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the immediate parent of this resource. See
+     * [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+     * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+     * For example:
+     * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+     * For third-party assets, it is up to the users to define.
+     * </pre>
+     *
+     * <code>string parent = 5;</code>
+     */
+    public Builder setParent(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the immediate parent of this resource. See
+     * [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+     * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+     * For example:
+     * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+     * For third-party assets, it is up to the users to define.
+     * </pre>
+     *
+     * <code>string parent = 5;</code>
+     */
+    public Builder clearParent() {
+
+      parent_ = getDefaultInstance().getParent();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The full name of the immediate parent of this resource. See
+     * [Resource
+     * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+     * for more information.
+     * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+     * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+     * For example:
+     * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+     * For third-party assets, it is up to the users to define.
+     * </pre>
+     *
+     * <code>string parent = 5;</code>
+     */
+    public Builder setParentBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      parent_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Struct data_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Struct,
+            com.google.protobuf.Struct.Builder,
+            com.google.protobuf.StructOrBuilder>
+        dataBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public boolean hasData() {
+      return dataBuilder_ != null || data_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public com.google.protobuf.Struct getData() {
+      if (dataBuilder_ == null) {
+        return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
+      } else {
+        return dataBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public Builder setData(com.google.protobuf.Struct value) {
+      if (dataBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        data_ = value;
+        onChanged();
+      } else {
+        dataBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public Builder setData(com.google.protobuf.Struct.Builder builderForValue) {
+      if (dataBuilder_ == null) {
+        data_ = builderForValue.build();
+        onChanged();
+      } else {
+        dataBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public Builder mergeData(com.google.protobuf.Struct value) {
+      if (dataBuilder_ == null) {
+        if (data_ != null) {
+          data_ = com.google.protobuf.Struct.newBuilder(data_).mergeFrom(value).buildPartial();
+        } else {
+          data_ = value;
+        }
+        onChanged();
+      } else {
+        dataBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public Builder clearData() {
+      if (dataBuilder_ == null) {
+        data_ = null;
+        onChanged();
+      } else {
+        data_ = null;
+        dataBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public com.google.protobuf.Struct.Builder getDataBuilder() {
+
+      onChanged();
+      return getDataFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    public com.google.protobuf.StructOrBuilder getDataOrBuilder() {
+      if (dataBuilder_ != null) {
+        return dataBuilder_.getMessageOrBuilder();
+      } else {
+        return data_ == null ? com.google.protobuf.Struct.getDefaultInstance() : data_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The content of the resource, in which some sensitive fields are scrubbed
+     * away and may not be present.
+     * </pre>
+     *
+     * <code>.google.protobuf.Struct data = 6;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Struct,
+            com.google.protobuf.Struct.Builder,
+            com.google.protobuf.StructOrBuilder>
+        getDataFieldBuilder() {
+      if (dataBuilder_ == null) {
+        dataBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Struct,
+                com.google.protobuf.Struct.Builder,
+                com.google.protobuf.StructOrBuilder>(getData(), getParentForChildren(), isClean());
+        data_ = null;
+      }
+      return dataBuilder_;
+    }
+
+    private com.google.protobuf.Any internalData_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Any,
+            com.google.protobuf.Any.Builder,
+            com.google.protobuf.AnyOrBuilder>
+        internalDataBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public boolean hasInternalData() {
+      return internalDataBuilder_ != null || internalData_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public com.google.protobuf.Any getInternalData() {
+      if (internalDataBuilder_ == null) {
+        return internalData_ == null ? com.google.protobuf.Any.getDefaultInstance() : internalData_;
+      } else {
+        return internalDataBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public Builder setInternalData(com.google.protobuf.Any value) {
+      if (internalDataBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        internalData_ = value;
+        onChanged();
+      } else {
+        internalDataBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public Builder setInternalData(com.google.protobuf.Any.Builder builderForValue) {
+      if (internalDataBuilder_ == null) {
+        internalData_ = builderForValue.build();
+        onChanged();
+      } else {
+        internalDataBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public Builder mergeInternalData(com.google.protobuf.Any value) {
+      if (internalDataBuilder_ == null) {
+        if (internalData_ != null) {
+          internalData_ =
+              com.google.protobuf.Any.newBuilder(internalData_).mergeFrom(value).buildPartial();
+        } else {
+          internalData_ = value;
+        }
+        onChanged();
+      } else {
+        internalDataBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public Builder clearInternalData() {
+      if (internalDataBuilder_ == null) {
+        internalData_ = null;
+        onChanged();
+      } else {
+        internalData_ = null;
+        internalDataBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public com.google.protobuf.Any.Builder getInternalDataBuilder() {
+
+      onChanged();
+      return getInternalDataFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    public com.google.protobuf.AnyOrBuilder getInternalDataOrBuilder() {
+      if (internalDataBuilder_ != null) {
+        return internalDataBuilder_.getMessageOrBuilder();
+      } else {
+        return internalData_ == null ? com.google.protobuf.Any.getDefaultInstance() : internalData_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The actual metadata content for the resource, only visible for internal
+     * users.
+     * </pre>
+     *
+     * <code>.google.protobuf.Any internal_data = 7;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Any,
+            com.google.protobuf.Any.Builder,
+            com.google.protobuf.AnyOrBuilder>
+        getInternalDataFieldBuilder() {
+      if (internalDataBuilder_ == null) {
+        internalDataBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Any,
+                com.google.protobuf.Any.Builder,
+                com.google.protobuf.AnyOrBuilder>(
+                getInternalData(), getParentForChildren(), isClean());
+        internalData_ = null;
+      }
+      return internalDataBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.Resource)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.Resource)
+  private static final com.google.cloud.asset.v1p2beta1.Resource DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.Resource();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.Resource getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Resource> PARSER =
+      new com.google.protobuf.AbstractParser<Resource>() {
+        @java.lang.Override
+        public Resource parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new Resource(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<Resource> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Resource> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.Resource getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ResourceOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ResourceOrBuilder.java
new file mode 100644
index 000000000000..e95ae9d26b03
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/ResourceOrBuilder.java
@@ -0,0 +1,219 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface ResourceOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.Resource)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The API version. Example: "v1".
+   * </pre>
+   *
+   * <code>string version = 1;</code>
+   */
+  java.lang.String getVersion();
+  /**
+   *
+   *
+   * <pre>
+   * The API version. Example: "v1".
+   * </pre>
+   *
+   * <code>string version = 1;</code>
+   */
+  com.google.protobuf.ByteString getVersionBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The URL of the discovery document containing the resource's JSON schema.
+   * For example:
+   * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+   * It will be left unspecified for resources without a discovery-based API,
+   * such as Cloud Bigtable.
+   * </pre>
+   *
+   * <code>string discovery_document_uri = 2;</code>
+   */
+  java.lang.String getDiscoveryDocumentUri();
+  /**
+   *
+   *
+   * <pre>
+   * The URL of the discovery document containing the resource's JSON schema.
+   * For example:
+   * `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+   * It will be left unspecified for resources without a discovery-based API,
+   * such as Cloud Bigtable.
+   * </pre>
+   *
+   * <code>string discovery_document_uri = 2;</code>
+   */
+  com.google.protobuf.ByteString getDiscoveryDocumentUriBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The JSON schema name listed in the discovery document.
+   * Example: "Project". It will be left unspecified for resources (such as
+   * Cloud Bigtable) without a discovery-based API.
+   * </pre>
+   *
+   * <code>string discovery_name = 3;</code>
+   */
+  java.lang.String getDiscoveryName();
+  /**
+   *
+   *
+   * <pre>
+   * The JSON schema name listed in the discovery document.
+   * Example: "Project". It will be left unspecified for resources (such as
+   * Cloud Bigtable) without a discovery-based API.
+   * </pre>
+   *
+   * <code>string discovery_name = 3;</code>
+   */
+  com.google.protobuf.ByteString getDiscoveryNameBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The REST URL for accessing the resource. An HTTP GET operation using this
+   * URL returns the resource itself.
+   * Example:
+   * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+   * It will be left unspecified for resources without a REST API.
+   * </pre>
+   *
+   * <code>string resource_url = 4;</code>
+   */
+  java.lang.String getResourceUrl();
+  /**
+   *
+   *
+   * <pre>
+   * The REST URL for accessing the resource. An HTTP GET operation using this
+   * URL returns the resource itself.
+   * Example:
+   * `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+   * It will be left unspecified for resources without a REST API.
+   * </pre>
+   *
+   * <code>string resource_url = 4;</code>
+   */
+  com.google.protobuf.ByteString getResourceUrlBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the immediate parent of this resource. See
+   * [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+   * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+   * For example:
+   * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+   * For third-party assets, it is up to the users to define.
+   * </pre>
+   *
+   * <code>string parent = 5;</code>
+   */
+  java.lang.String getParent();
+  /**
+   *
+   *
+   * <pre>
+   * The full name of the immediate parent of this resource. See
+   * [Resource
+   * Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+   * for more information.
+   * For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+   * hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+   * For example:
+   * `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+   * For third-party assets, it is up to the users to define.
+   * </pre>
+   *
+   * <code>string parent = 5;</code>
+   */
+  com.google.protobuf.ByteString getParentBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  boolean hasData();
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  com.google.protobuf.Struct getData();
+  /**
+   *
+   *
+   * <pre>
+   * The content of the resource, in which some sensitive fields are scrubbed
+   * away and may not be present.
+   * </pre>
+   *
+   * <code>.google.protobuf.Struct data = 6;</code>
+   */
+  com.google.protobuf.StructOrBuilder getDataOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  boolean hasInternalData();
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  com.google.protobuf.Any getInternalData();
+  /**
+   *
+   *
+   * <pre>
+   * The actual metadata content for the resource, only visible for internal
+   * users.
+   * </pre>
+   *
+   * <code>.google.protobuf.Any internal_data = 7;</code>
+   */
+  com.google.protobuf.AnyOrBuilder getInternalDataOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAsset.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAsset.java
new file mode 100644
index 000000000000..3ae92aba6910
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAsset.java
@@ -0,0 +1,1045 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Temporal asset. In addition to the asset, the temporal asset includes the
+ * status of the asset and valid from and to time of it.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.TemporalAsset}
+ */
+public final class TemporalAsset extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.TemporalAsset)
+    TemporalAssetOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use TemporalAsset.newBuilder() to construct.
+  private TemporalAsset(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private TemporalAsset() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private TemporalAsset(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.cloud.asset.v1p2beta1.TimeWindow.Builder subBuilder = null;
+              if (window_ != null) {
+                subBuilder = window_.toBuilder();
+              }
+              window_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.TimeWindow.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(window_);
+                window_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 16:
+            {
+              deleted_ = input.readBool();
+              break;
+            }
+          case 26:
+            {
+              com.google.cloud.asset.v1p2beta1.Asset.Builder subBuilder = null;
+              if (asset_ != null) {
+                subBuilder = asset_.toBuilder();
+              }
+              asset_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.Asset.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(asset_);
+                asset_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.TemporalAsset.class,
+            com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder.class);
+  }
+
+  public static final int WINDOW_FIELD_NUMBER = 1;
+  private com.google.cloud.asset.v1p2beta1.TimeWindow window_;
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  public boolean hasWindow() {
+    return window_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TimeWindow getWindow() {
+    return window_ == null
+        ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+        : window_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getWindowOrBuilder() {
+    return getWindow();
+  }
+
+  public static final int DELETED_FIELD_NUMBER = 2;
+  private boolean deleted_;
+  /**
+   *
+   *
+   * <pre>
+   * If the asset is deleted or not.
+   * </pre>
+   *
+   * <code>bool deleted = 2;</code>
+   */
+  public boolean getDeleted() {
+    return deleted_;
+  }
+
+  public static final int ASSET_FIELD_NUMBER = 3;
+  private com.google.cloud.asset.v1p2beta1.Asset asset_;
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  public boolean hasAsset() {
+    return asset_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.Asset getAsset() {
+    return asset_ == null ? com.google.cloud.asset.v1p2beta1.Asset.getDefaultInstance() : asset_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.AssetOrBuilder getAssetOrBuilder() {
+    return getAsset();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (window_ != null) {
+      output.writeMessage(1, getWindow());
+    }
+    if (deleted_ != false) {
+      output.writeBool(2, deleted_);
+    }
+    if (asset_ != null) {
+      output.writeMessage(3, getAsset());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (window_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getWindow());
+    }
+    if (deleted_ != false) {
+      size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, deleted_);
+    }
+    if (asset_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getAsset());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.TemporalAsset)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.TemporalAsset other =
+        (com.google.cloud.asset.v1p2beta1.TemporalAsset) obj;
+
+    if (hasWindow() != other.hasWindow()) return false;
+    if (hasWindow()) {
+      if (!getWindow().equals(other.getWindow())) return false;
+    }
+    if (getDeleted() != other.getDeleted()) return false;
+    if (hasAsset() != other.hasAsset()) return false;
+    if (hasAsset()) {
+      if (!getAsset().equals(other.getAsset())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasWindow()) {
+      hash = (37 * hash) + WINDOW_FIELD_NUMBER;
+      hash = (53 * hash) + getWindow().hashCode();
+    }
+    hash = (37 * hash) + DELETED_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDeleted());
+    if (hasAsset()) {
+      hash = (37 * hash) + ASSET_FIELD_NUMBER;
+      hash = (53 * hash) + getAsset().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.TemporalAsset prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Temporal asset. In addition to the asset, the temporal asset includes the
+   * status of the asset and valid from and to time of it.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.TemporalAsset}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.TemporalAsset)
+      com.google.cloud.asset.v1p2beta1.TemporalAssetOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.TemporalAsset.class,
+              com.google.cloud.asset.v1p2beta1.TemporalAsset.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.TemporalAsset.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (windowBuilder_ == null) {
+        window_ = null;
+      } else {
+        window_ = null;
+        windowBuilder_ = null;
+      }
+      deleted_ = false;
+
+      if (assetBuilder_ == null) {
+        asset_ = null;
+      } else {
+        asset_ = null;
+        assetBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TemporalAsset_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.TemporalAsset.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset build() {
+      com.google.cloud.asset.v1p2beta1.TemporalAsset result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TemporalAsset buildPartial() {
+      com.google.cloud.asset.v1p2beta1.TemporalAsset result =
+          new com.google.cloud.asset.v1p2beta1.TemporalAsset(this);
+      if (windowBuilder_ == null) {
+        result.window_ = window_;
+      } else {
+        result.window_ = windowBuilder_.build();
+      }
+      result.deleted_ = deleted_;
+      if (assetBuilder_ == null) {
+        result.asset_ = asset_;
+      } else {
+        result.asset_ = assetBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.TemporalAsset) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.TemporalAsset) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.TemporalAsset other) {
+      if (other == com.google.cloud.asset.v1p2beta1.TemporalAsset.getDefaultInstance()) return this;
+      if (other.hasWindow()) {
+        mergeWindow(other.getWindow());
+      }
+      if (other.getDeleted() != false) {
+        setDeleted(other.getDeleted());
+      }
+      if (other.hasAsset()) {
+        mergeAsset(other.getAsset());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.TemporalAsset parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.TemporalAsset) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.TimeWindow window_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TimeWindow,
+            com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+            com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>
+        windowBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public boolean hasWindow() {
+      return windowBuilder_ != null || window_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindow getWindow() {
+      if (windowBuilder_ == null) {
+        return window_ == null
+            ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+            : window_;
+      } else {
+        return windowBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public Builder setWindow(com.google.cloud.asset.v1p2beta1.TimeWindow value) {
+      if (windowBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        window_ = value;
+        onChanged();
+      } else {
+        windowBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public Builder setWindow(com.google.cloud.asset.v1p2beta1.TimeWindow.Builder builderForValue) {
+      if (windowBuilder_ == null) {
+        window_ = builderForValue.build();
+        onChanged();
+      } else {
+        windowBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public Builder mergeWindow(com.google.cloud.asset.v1p2beta1.TimeWindow value) {
+      if (windowBuilder_ == null) {
+        if (window_ != null) {
+          window_ =
+              com.google.cloud.asset.v1p2beta1.TimeWindow.newBuilder(window_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          window_ = value;
+        }
+        onChanged();
+      } else {
+        windowBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public Builder clearWindow() {
+      if (windowBuilder_ == null) {
+        window_ = null;
+        onChanged();
+      } else {
+        window_ = null;
+        windowBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindow.Builder getWindowBuilder() {
+
+      onChanged();
+      return getWindowFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getWindowOrBuilder() {
+      if (windowBuilder_ != null) {
+        return windowBuilder_.getMessageOrBuilder();
+      } else {
+        return window_ == null
+            ? com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()
+            : window_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The time window when the asset data and state was observed.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.TimeWindow,
+            com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+            com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>
+        getWindowFieldBuilder() {
+      if (windowBuilder_ == null) {
+        windowBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.TimeWindow,
+                com.google.cloud.asset.v1p2beta1.TimeWindow.Builder,
+                com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder>(
+                getWindow(), getParentForChildren(), isClean());
+        window_ = null;
+      }
+      return windowBuilder_;
+    }
+
+    private boolean deleted_;
+    /**
+     *
+     *
+     * <pre>
+     * If the asset is deleted or not.
+     * </pre>
+     *
+     * <code>bool deleted = 2;</code>
+     */
+    public boolean getDeleted() {
+      return deleted_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * If the asset is deleted or not.
+     * </pre>
+     *
+     * <code>bool deleted = 2;</code>
+     */
+    public Builder setDeleted(boolean value) {
+
+      deleted_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * If the asset is deleted or not.
+     * </pre>
+     *
+     * <code>bool deleted = 2;</code>
+     */
+    public Builder clearDeleted() {
+
+      deleted_ = false;
+      onChanged();
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.Asset asset_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Asset,
+            com.google.cloud.asset.v1p2beta1.Asset.Builder,
+            com.google.cloud.asset.v1p2beta1.AssetOrBuilder>
+        assetBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public boolean hasAsset() {
+      return assetBuilder_ != null || asset_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Asset getAsset() {
+      if (assetBuilder_ == null) {
+        return asset_ == null
+            ? com.google.cloud.asset.v1p2beta1.Asset.getDefaultInstance()
+            : asset_;
+      } else {
+        return assetBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public Builder setAsset(com.google.cloud.asset.v1p2beta1.Asset value) {
+      if (assetBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        asset_ = value;
+        onChanged();
+      } else {
+        assetBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public Builder setAsset(com.google.cloud.asset.v1p2beta1.Asset.Builder builderForValue) {
+      if (assetBuilder_ == null) {
+        asset_ = builderForValue.build();
+        onChanged();
+      } else {
+        assetBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public Builder mergeAsset(com.google.cloud.asset.v1p2beta1.Asset value) {
+      if (assetBuilder_ == null) {
+        if (asset_ != null) {
+          asset_ =
+              com.google.cloud.asset.v1p2beta1.Asset.newBuilder(asset_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          asset_ = value;
+        }
+        onChanged();
+      } else {
+        assetBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public Builder clearAsset() {
+      if (assetBuilder_ == null) {
+        asset_ = null;
+        onChanged();
+      } else {
+        asset_ = null;
+        assetBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Asset.Builder getAssetBuilder() {
+
+      onChanged();
+      return getAssetFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.AssetOrBuilder getAssetOrBuilder() {
+      if (assetBuilder_ != null) {
+        return assetBuilder_.getMessageOrBuilder();
+      } else {
+        return asset_ == null
+            ? com.google.cloud.asset.v1p2beta1.Asset.getDefaultInstance()
+            : asset_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Asset.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Asset,
+            com.google.cloud.asset.v1p2beta1.Asset.Builder,
+            com.google.cloud.asset.v1p2beta1.AssetOrBuilder>
+        getAssetFieldBuilder() {
+      if (assetBuilder_ == null) {
+        assetBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.Asset,
+                com.google.cloud.asset.v1p2beta1.Asset.Builder,
+                com.google.cloud.asset.v1p2beta1.AssetOrBuilder>(
+                getAsset(), getParentForChildren(), isClean());
+        asset_ = null;
+      }
+      return assetBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.TemporalAsset)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.TemporalAsset)
+  private static final com.google.cloud.asset.v1p2beta1.TemporalAsset DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.TemporalAsset();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TemporalAsset getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<TemporalAsset> PARSER =
+      new com.google.protobuf.AbstractParser<TemporalAsset>() {
+        @java.lang.Override
+        public TemporalAsset parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new TemporalAsset(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<TemporalAsset> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<TemporalAsset> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.TemporalAsset getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAssetOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAssetOrBuilder.java
new file mode 100644
index 000000000000..c723257a8dbe
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TemporalAssetOrBuilder.java
@@ -0,0 +1,83 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface TemporalAssetOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.TemporalAsset)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  boolean hasWindow();
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TimeWindow getWindow();
+  /**
+   *
+   *
+   * <pre>
+   * The time window when the asset data and state was observed.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.TimeWindow window = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder getWindowOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * If the asset is deleted or not.
+   * </pre>
+   *
+   * <code>bool deleted = 2;</code>
+   */
+  boolean getDeleted();
+
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  boolean hasAsset();
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.Asset getAsset();
+  /**
+   *
+   *
+   * <pre>
+   * Asset.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Asset asset = 3;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.AssetOrBuilder getAssetOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindow.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindow.java
new file mode 100644
index 000000000000..a86493bee938
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindow.java
@@ -0,0 +1,960 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * A time window of (start_time, end_time].
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.TimeWindow}
+ */
+public final class TimeWindow extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.TimeWindow)
+    TimeWindowOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use TimeWindow.newBuilder() to construct.
+  private TimeWindow(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private TimeWindow() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private TimeWindow(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (startTime_ != null) {
+                subBuilder = startTime_.toBuilder();
+              }
+              startTime_ =
+                  input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(startTime_);
+                startTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 18:
+            {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (endTime_ != null) {
+                subBuilder = endTime_.toBuilder();
+              }
+              endTime_ =
+                  input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endTime_);
+                endTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetProto
+        .internal_static_google_cloud_asset_v1p2beta1_TimeWindow_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.TimeWindow.class,
+            com.google.cloud.asset.v1p2beta1.TimeWindow.Builder.class);
+  }
+
+  public static final int START_TIME_FIELD_NUMBER = 1;
+  private com.google.protobuf.Timestamp startTime_;
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  public boolean hasStartTime() {
+    return startTime_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  public com.google.protobuf.Timestamp getStartTime() {
+    return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() {
+    return getStartTime();
+  }
+
+  public static final int END_TIME_FIELD_NUMBER = 2;
+  private com.google.protobuf.Timestamp endTime_;
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  public boolean hasEndTime() {
+    return endTime_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  public com.google.protobuf.Timestamp getEndTime() {
+    return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() {
+    return getEndTime();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (startTime_ != null) {
+      output.writeMessage(1, getStartTime());
+    }
+    if (endTime_ != null) {
+      output.writeMessage(2, getEndTime());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (startTime_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getStartTime());
+    }
+    if (endTime_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getEndTime());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.TimeWindow)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.TimeWindow other =
+        (com.google.cloud.asset.v1p2beta1.TimeWindow) obj;
+
+    if (hasStartTime() != other.hasStartTime()) return false;
+    if (hasStartTime()) {
+      if (!getStartTime().equals(other.getStartTime())) return false;
+    }
+    if (hasEndTime() != other.hasEndTime()) return false;
+    if (hasEndTime()) {
+      if (!getEndTime().equals(other.getEndTime())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasStartTime()) {
+      hash = (37 * hash) + START_TIME_FIELD_NUMBER;
+      hash = (53 * hash) + getStartTime().hashCode();
+    }
+    if (hasEndTime()) {
+      hash = (37 * hash) + END_TIME_FIELD_NUMBER;
+      hash = (53 * hash) + getEndTime().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.TimeWindow prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * A time window of (start_time, end_time].
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.TimeWindow}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.TimeWindow)
+      com.google.cloud.asset.v1p2beta1.TimeWindowOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TimeWindow_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.TimeWindow.class,
+              com.google.cloud.asset.v1p2beta1.TimeWindow.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.TimeWindow.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (startTimeBuilder_ == null) {
+        startTime_ = null;
+      } else {
+        startTime_ = null;
+        startTimeBuilder_ = null;
+      }
+      if (endTimeBuilder_ == null) {
+        endTime_ = null;
+      } else {
+        endTime_ = null;
+        endTimeBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetProto
+          .internal_static_google_cloud_asset_v1p2beta1_TimeWindow_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TimeWindow getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TimeWindow build() {
+      com.google.cloud.asset.v1p2beta1.TimeWindow result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.TimeWindow buildPartial() {
+      com.google.cloud.asset.v1p2beta1.TimeWindow result =
+          new com.google.cloud.asset.v1p2beta1.TimeWindow(this);
+      if (startTimeBuilder_ == null) {
+        result.startTime_ = startTime_;
+      } else {
+        result.startTime_ = startTimeBuilder_.build();
+      }
+      if (endTimeBuilder_ == null) {
+        result.endTime_ = endTime_;
+      } else {
+        result.endTime_ = endTimeBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.TimeWindow) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.TimeWindow) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.TimeWindow other) {
+      if (other == com.google.cloud.asset.v1p2beta1.TimeWindow.getDefaultInstance()) return this;
+      if (other.hasStartTime()) {
+        mergeStartTime(other.getStartTime());
+      }
+      if (other.hasEndTime()) {
+        mergeEndTime(other.getEndTime());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.TimeWindow parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.asset.v1p2beta1.TimeWindow) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Timestamp startTime_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        startTimeBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public boolean hasStartTime() {
+      return startTimeBuilder_ != null || startTime_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public com.google.protobuf.Timestamp getStartTime() {
+      if (startTimeBuilder_ == null) {
+        return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_;
+      } else {
+        return startTimeBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public Builder setStartTime(com.google.protobuf.Timestamp value) {
+      if (startTimeBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        startTime_ = value;
+        onChanged();
+      } else {
+        startTimeBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (startTimeBuilder_ == null) {
+        startTime_ = builderForValue.build();
+        onChanged();
+      } else {
+        startTimeBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public Builder mergeStartTime(com.google.protobuf.Timestamp value) {
+      if (startTimeBuilder_ == null) {
+        if (startTime_ != null) {
+          startTime_ =
+              com.google.protobuf.Timestamp.newBuilder(startTime_).mergeFrom(value).buildPartial();
+        } else {
+          startTime_ = value;
+        }
+        onChanged();
+      } else {
+        startTimeBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public Builder clearStartTime() {
+      if (startTimeBuilder_ == null) {
+        startTime_ = null;
+        onChanged();
+      } else {
+        startTime_ = null;
+        startTimeBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() {
+
+      onChanged();
+      return getStartTimeFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() {
+      if (startTimeBuilder_ != null) {
+        return startTimeBuilder_.getMessageOrBuilder();
+      } else {
+        return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Start time of the time window (exclusive).
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp start_time = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        getStartTimeFieldBuilder() {
+      if (startTimeBuilder_ == null) {
+        startTimeBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Timestamp,
+                com.google.protobuf.Timestamp.Builder,
+                com.google.protobuf.TimestampOrBuilder>(
+                getStartTime(), getParentForChildren(), isClean());
+        startTime_ = null;
+      }
+      return startTimeBuilder_;
+    }
+
+    private com.google.protobuf.Timestamp endTime_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        endTimeBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public boolean hasEndTime() {
+      return endTimeBuilder_ != null || endTime_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public com.google.protobuf.Timestamp getEndTime() {
+      if (endTimeBuilder_ == null) {
+        return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_;
+      } else {
+        return endTimeBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public Builder setEndTime(com.google.protobuf.Timestamp value) {
+      if (endTimeBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        endTime_ = value;
+        onChanged();
+      } else {
+        endTimeBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (endTimeBuilder_ == null) {
+        endTime_ = builderForValue.build();
+        onChanged();
+      } else {
+        endTimeBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public Builder mergeEndTime(com.google.protobuf.Timestamp value) {
+      if (endTimeBuilder_ == null) {
+        if (endTime_ != null) {
+          endTime_ =
+              com.google.protobuf.Timestamp.newBuilder(endTime_).mergeFrom(value).buildPartial();
+        } else {
+          endTime_ = value;
+        }
+        onChanged();
+      } else {
+        endTimeBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public Builder clearEndTime() {
+      if (endTimeBuilder_ == null) {
+        endTime_ = null;
+        onChanged();
+      } else {
+        endTime_ = null;
+        endTimeBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() {
+
+      onChanged();
+      return getEndTimeFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() {
+      if (endTimeBuilder_ != null) {
+        return endTimeBuilder_.getMessageOrBuilder();
+      } else {
+        return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * End time of the time window (inclusive).
+     * Current timestamp if not specified.
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp end_time = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp,
+            com.google.protobuf.Timestamp.Builder,
+            com.google.protobuf.TimestampOrBuilder>
+        getEndTimeFieldBuilder() {
+      if (endTimeBuilder_ == null) {
+        endTimeBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Timestamp,
+                com.google.protobuf.Timestamp.Builder,
+                com.google.protobuf.TimestampOrBuilder>(
+                getEndTime(), getParentForChildren(), isClean());
+        endTime_ = null;
+      }
+      return endTimeBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.TimeWindow)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.TimeWindow)
+  private static final com.google.cloud.asset.v1p2beta1.TimeWindow DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.TimeWindow();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.TimeWindow getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<TimeWindow> PARSER =
+      new com.google.protobuf.AbstractParser<TimeWindow>() {
+        @java.lang.Override
+        public TimeWindow parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new TimeWindow(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<TimeWindow> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<TimeWindow> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.TimeWindow getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindowOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindowOrBuilder.java
new file mode 100644
index 000000000000..5afac3d8d5dd
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/TimeWindowOrBuilder.java
@@ -0,0 +1,75 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/assets.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface TimeWindowOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.TimeWindow)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  boolean hasStartTime();
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  com.google.protobuf.Timestamp getStartTime();
+  /**
+   *
+   *
+   * <pre>
+   * Start time of the time window (exclusive).
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp start_time = 1;</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  boolean hasEndTime();
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  com.google.protobuf.Timestamp getEndTime();
+  /**
+   *
+   *
+   * <pre>
+   * End time of the time window (inclusive).
+   * Current timestamp if not specified.
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp end_time = 2;</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequest.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequest.java
new file mode 100644
index 000000000000..f511236399ab
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequest.java
@@ -0,0 +1,1029 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+/**
+ *
+ *
+ * <pre>
+ * Update asset feed request.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.asset.v1p2beta1.UpdateFeedRequest}
+ */
+public final class UpdateFeedRequest extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.asset.v1p2beta1.UpdateFeedRequest)
+    UpdateFeedRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use UpdateFeedRequest.newBuilder() to construct.
+  private UpdateFeedRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private UpdateFeedRequest() {}
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private UpdateFeedRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10:
+            {
+              com.google.cloud.asset.v1p2beta1.Feed.Builder subBuilder = null;
+              if (feed_ != null) {
+                subBuilder = feed_.toBuilder();
+              }
+              feed_ =
+                  input.readMessage(
+                      com.google.cloud.asset.v1p2beta1.Feed.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(feed_);
+                feed_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          case 18:
+            {
+              com.google.protobuf.FieldMask.Builder subBuilder = null;
+              if (updateMask_ != null) {
+                subBuilder = updateMask_.toBuilder();
+              }
+              updateMask_ =
+                  input.readMessage(com.google.protobuf.FieldMask.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(updateMask_);
+                updateMask_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+        .internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.class,
+            com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.Builder.class);
+  }
+
+  public static final int FEED_FIELD_NUMBER = 1;
+  private com.google.cloud.asset.v1p2beta1.Feed feed_;
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  public boolean hasFeed() {
+    return feed_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.Feed getFeed() {
+    return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder() {
+    return getFeed();
+  }
+
+  public static final int UPDATE_MASK_FIELD_NUMBER = 2;
+  private com.google.protobuf.FieldMask updateMask_;
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  public boolean hasUpdateMask() {
+    return updateMask_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  public com.google.protobuf.FieldMask getUpdateMask() {
+    return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() {
+    return getUpdateMask();
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (feed_ != null) {
+      output.writeMessage(1, getFeed());
+    }
+    if (updateMask_ != null) {
+      output.writeMessage(2, getUpdateMask());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (feed_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getFeed());
+    }
+    if (updateMask_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpdateMask());
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.asset.v1p2beta1.UpdateFeedRequest)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.asset.v1p2beta1.UpdateFeedRequest other =
+        (com.google.cloud.asset.v1p2beta1.UpdateFeedRequest) obj;
+
+    if (hasFeed() != other.hasFeed()) return false;
+    if (hasFeed()) {
+      if (!getFeed().equals(other.getFeed())) return false;
+    }
+    if (hasUpdateMask() != other.hasUpdateMask()) return false;
+    if (hasUpdateMask()) {
+      if (!getUpdateMask().equals(other.getUpdateMask())) return false;
+    }
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasFeed()) {
+      hash = (37 * hash) + FEED_FIELD_NUMBER;
+      hash = (53 * hash) + getFeed().hashCode();
+    }
+    if (hasUpdateMask()) {
+      hash = (37 * hash) + UPDATE_MASK_FIELD_NUMBER;
+      hash = (53 * hash) + getUpdateMask().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.asset.v1p2beta1.UpdateFeedRequest prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Update asset feed request.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.asset.v1p2beta1.UpdateFeedRequest}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.asset.v1p2beta1.UpdateFeedRequest)
+      com.google.cloud.asset.v1p2beta1.UpdateFeedRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.class,
+              com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.Builder.class);
+    }
+
+    // Construct using com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (feedBuilder_ == null) {
+        feed_ = null;
+      } else {
+        feed_ = null;
+        feedBuilder_ = null;
+      }
+      if (updateMaskBuilder_ == null) {
+        updateMask_ = null;
+      } else {
+        updateMask_ = null;
+        updateMaskBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.asset.v1p2beta1.AssetServiceProto
+          .internal_static_google_cloud_asset_v1p2beta1_UpdateFeedRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.UpdateFeedRequest getDefaultInstanceForType() {
+      return com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.UpdateFeedRequest build() {
+      com.google.cloud.asset.v1p2beta1.UpdateFeedRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.asset.v1p2beta1.UpdateFeedRequest buildPartial() {
+      com.google.cloud.asset.v1p2beta1.UpdateFeedRequest result =
+          new com.google.cloud.asset.v1p2beta1.UpdateFeedRequest(this);
+      if (feedBuilder_ == null) {
+        result.feed_ = feed_;
+      } else {
+        result.feed_ = feedBuilder_.build();
+      }
+      if (updateMaskBuilder_ == null) {
+        result.updateMask_ = updateMask_;
+      } else {
+        result.updateMask_ = updateMaskBuilder_.build();
+      }
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.asset.v1p2beta1.UpdateFeedRequest) {
+        return mergeFrom((com.google.cloud.asset.v1p2beta1.UpdateFeedRequest) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.asset.v1p2beta1.UpdateFeedRequest other) {
+      if (other == com.google.cloud.asset.v1p2beta1.UpdateFeedRequest.getDefaultInstance())
+        return this;
+      if (other.hasFeed()) {
+        mergeFeed(other.getFeed());
+      }
+      if (other.hasUpdateMask()) {
+        mergeUpdateMask(other.getUpdateMask());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.asset.v1p2beta1.UpdateFeedRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage =
+            (com.google.cloud.asset.v1p2beta1.UpdateFeedRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private com.google.cloud.asset.v1p2beta1.Feed feed_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        feedBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public boolean hasFeed() {
+      return feedBuilder_ != null || feed_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed getFeed() {
+      if (feedBuilder_ == null) {
+        return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+      } else {
+        return feedBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public Builder setFeed(com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        feed_ = value;
+        onChanged();
+      } else {
+        feedBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public Builder setFeed(com.google.cloud.asset.v1p2beta1.Feed.Builder builderForValue) {
+      if (feedBuilder_ == null) {
+        feed_ = builderForValue.build();
+        onChanged();
+      } else {
+        feedBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public Builder mergeFeed(com.google.cloud.asset.v1p2beta1.Feed value) {
+      if (feedBuilder_ == null) {
+        if (feed_ != null) {
+          feed_ =
+              com.google.cloud.asset.v1p2beta1.Feed.newBuilder(feed_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          feed_ = value;
+        }
+        onChanged();
+      } else {
+        feedBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public Builder clearFeed() {
+      if (feedBuilder_ == null) {
+        feed_ = null;
+        onChanged();
+      } else {
+        feed_ = null;
+        feedBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.Feed.Builder getFeedBuilder() {
+
+      onChanged();
+      return getFeedFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    public com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder() {
+      if (feedBuilder_ != null) {
+        return feedBuilder_.getMessageOrBuilder();
+      } else {
+        return feed_ == null ? com.google.cloud.asset.v1p2beta1.Feed.getDefaultInstance() : feed_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The new values of feed details. It must match an existing feed and the
+     * field `name` must be in the format of:
+     * projects/project_number/feeds/feed_id or
+     * folders/folder_number/feeds/feed_id or
+     * organizations/organization_number/feeds/feed_id.
+     * </pre>
+     *
+     * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.asset.v1p2beta1.Feed,
+            com.google.cloud.asset.v1p2beta1.Feed.Builder,
+            com.google.cloud.asset.v1p2beta1.FeedOrBuilder>
+        getFeedFieldBuilder() {
+      if (feedBuilder_ == null) {
+        feedBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.asset.v1p2beta1.Feed,
+                com.google.cloud.asset.v1p2beta1.Feed.Builder,
+                com.google.cloud.asset.v1p2beta1.FeedOrBuilder>(
+                getFeed(), getParentForChildren(), isClean());
+        feed_ = null;
+      }
+      return feedBuilder_;
+    }
+
+    private com.google.protobuf.FieldMask updateMask_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.FieldMask,
+            com.google.protobuf.FieldMask.Builder,
+            com.google.protobuf.FieldMaskOrBuilder>
+        updateMaskBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public boolean hasUpdateMask() {
+      return updateMaskBuilder_ != null || updateMask_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public com.google.protobuf.FieldMask getUpdateMask() {
+      if (updateMaskBuilder_ == null) {
+        return updateMask_ == null
+            ? com.google.protobuf.FieldMask.getDefaultInstance()
+            : updateMask_;
+      } else {
+        return updateMaskBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public Builder setUpdateMask(com.google.protobuf.FieldMask value) {
+      if (updateMaskBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        updateMask_ = value;
+        onChanged();
+      } else {
+        updateMaskBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForValue) {
+      if (updateMaskBuilder_ == null) {
+        updateMask_ = builderForValue.build();
+        onChanged();
+      } else {
+        updateMaskBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) {
+      if (updateMaskBuilder_ == null) {
+        if (updateMask_ != null) {
+          updateMask_ =
+              com.google.protobuf.FieldMask.newBuilder(updateMask_).mergeFrom(value).buildPartial();
+        } else {
+          updateMask_ = value;
+        }
+        onChanged();
+      } else {
+        updateMaskBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public Builder clearUpdateMask() {
+      if (updateMaskBuilder_ == null) {
+        updateMask_ = null;
+        onChanged();
+      } else {
+        updateMask_ = null;
+        updateMaskBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() {
+
+      onChanged();
+      return getUpdateMaskFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() {
+      if (updateMaskBuilder_ != null) {
+        return updateMaskBuilder_.getMessageOrBuilder();
+      } else {
+        return updateMask_ == null
+            ? com.google.protobuf.FieldMask.getDefaultInstance()
+            : updateMask_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Only updates the `feed` fields indicated by this mask.
+     * The field mask must not be empty, and it must not contain fields that
+     * are immutable or only set by the server.
+     * </pre>
+     *
+     * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.FieldMask,
+            com.google.protobuf.FieldMask.Builder,
+            com.google.protobuf.FieldMaskOrBuilder>
+        getUpdateMaskFieldBuilder() {
+      if (updateMaskBuilder_ == null) {
+        updateMaskBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.FieldMask,
+                com.google.protobuf.FieldMask.Builder,
+                com.google.protobuf.FieldMaskOrBuilder>(
+                getUpdateMask(), getParentForChildren(), isClean());
+        updateMask_ = null;
+      }
+      return updateMaskBuilder_;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.asset.v1p2beta1.UpdateFeedRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.asset.v1p2beta1.UpdateFeedRequest)
+  private static final com.google.cloud.asset.v1p2beta1.UpdateFeedRequest DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.asset.v1p2beta1.UpdateFeedRequest();
+  }
+
+  public static com.google.cloud.asset.v1p2beta1.UpdateFeedRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<UpdateFeedRequest> PARSER =
+      new com.google.protobuf.AbstractParser<UpdateFeedRequest>() {
+        @java.lang.Override
+        public UpdateFeedRequest parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new UpdateFeedRequest(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<UpdateFeedRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<UpdateFeedRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.asset.v1p2beta1.UpdateFeedRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequestOrBuilder.java b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequestOrBuilder.java
new file mode 100644
index 000000000000..48ee69b94aa6
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/java/com/google/cloud/asset/v1p2beta1/UpdateFeedRequestOrBuilder.java
@@ -0,0 +1,90 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/asset/v1p2beta1/asset_service.proto
+
+package com.google.cloud.asset.v1p2beta1;
+
+public interface UpdateFeedRequestOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.asset.v1p2beta1.UpdateFeedRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  boolean hasFeed();
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.Feed getFeed();
+  /**
+   *
+   *
+   * <pre>
+   * The new values of feed details. It must match an existing feed and the
+   * field `name` must be in the format of:
+   * projects/project_number/feeds/feed_id or
+   * folders/folder_number/feeds/feed_id or
+   * organizations/organization_number/feeds/feed_id.
+   * </pre>
+   *
+   * <code>.google.cloud.asset.v1p2beta1.Feed feed = 1;</code>
+   */
+  com.google.cloud.asset.v1p2beta1.FeedOrBuilder getFeedOrBuilder();
+
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  boolean hasUpdateMask();
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  com.google.protobuf.FieldMask getUpdateMask();
+  /**
+   *
+   *
+   * <pre>
+   * Only updates the `feed` fields indicated by this mask.
+   * The field mask must not be empty, and it must not contain fields that
+   * are immutable or only set by the server.
+   * </pre>
+   *
+   * <code>.google.protobuf.FieldMask update_mask = 2;</code>
+   */
+  com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder();
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/asset_service.proto b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/asset_service.proto
new file mode 100644
index 000000000000..0d461d0fa81c
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/asset_service.proto
@@ -0,0 +1,384 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.cloud.asset.v1p2beta1;
+
+import "google/api/annotations.proto";
+import "google/cloud/asset/v1p2beta1/assets.proto";
+import "google/longrunning/operations.proto";
+import "google/protobuf/empty.proto";
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/timestamp.proto";
+import "google/api/client.proto";
+
+option csharp_namespace = "Google.Cloud.Asset.V1p2Beta1";
+option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1p2beta1;asset";
+option java_multiple_files = true;
+option java_outer_classname = "AssetServiceProto";
+option java_package = "com.google.cloud.asset.v1p2beta1";
+option php_namespace = "Google\\Cloud\\Asset\\V1p2Beta1";
+
+// Asset service definition.
+service AssetService {
+  option (google.api.default_host) = "cloudasset.googleapis.com";
+  option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
+
+  // Exports assets with time and resource types to a given Cloud Storage
+  // location. The output format is newline-delimited JSON.
+  // This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
+  // to keep track of the export.
+  rpc ExportAssets(ExportAssetsRequest) returns (google.longrunning.Operation) {
+    option (google.api.http) = {
+      post: "/v1p2beta1/{parent=*/*}:exportAssets"
+      body: "*"
+    };
+  }
+
+  // Batch gets the update history of assets that overlap a time window.
+  // For RESOURCE content, this API outputs history with asset in both
+  // non-delete or deleted status.
+  // For IAM_POLICY content, this API outputs history when the asset and its
+  // attached IAM POLICY both exist. This can create gaps in the output history.
+  rpc BatchGetAssetsHistory(BatchGetAssetsHistoryRequest) returns (BatchGetAssetsHistoryResponse) {
+    option (google.api.http) = {
+      get: "/v1p2beta1/{parent=*/*}:batchGetAssetsHistory"
+    };
+  }
+
+  // Creates a feed in a parent project/folder/organization to listen to its
+  // asset updates.
+  rpc CreateFeed(CreateFeedRequest) returns (Feed) {
+    option (google.api.http) = {
+      post: "/v1p2beta1/{parent=*/*}/feeds"
+      body: "*"
+    };
+  }
+
+  // Gets details about an asset feed.
+  rpc GetFeed(GetFeedRequest) returns (Feed) {
+    option (google.api.http) = {
+      get: "/v1p2beta1/{name=*/*/feeds/*}"
+    };
+  }
+
+  // Lists all asset feeds in a parent project/folder/organization.
+  rpc ListFeeds(ListFeedsRequest) returns (ListFeedsResponse) {
+    option (google.api.http) = {
+      get: "/v1p2beta1/{parent=*/*}/feeds"
+    };
+  }
+
+  // Updates an asset feed configuration.
+  rpc UpdateFeed(UpdateFeedRequest) returns (Feed) {
+    option (google.api.http) = {
+      patch: "/v1p2beta1/{feed.name=*/*/feeds/*}"
+      body: "*"
+    };
+  }
+
+  // Deletes an asset feed.
+  rpc DeleteFeed(DeleteFeedRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1p2beta1/{name=*/*/feeds/*}"
+    };
+  }
+}
+
+// Export asset request.
+message ExportAssetsRequest {
+  // Required. The relative name of the root asset. This can only be an
+  // organization number (such as "organizations/123"), a project ID (such as
+  // "projects/my-project-id"), or a project number (such as "projects/12345").
+  string parent = 1;
+
+  // Timestamp to take an asset snapshot. This can only be set to a timestamp
+  // between 2018-10-02 UTC (inclusive) and the current time. If not specified,
+  // the current time will be used. Due to delays in resource data collection
+  // and indexing, there is a volatile window during which running the same
+  // query may get different results.
+  google.protobuf.Timestamp read_time = 2;
+
+  // A list of asset types of which to take a snapshot for. For example:
+  // "compute.googleapis.com/Disk". If specified, only matching assets will be
+  // returned. See [Introduction to Cloud Asset
+  // Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+  // for all supported asset types.
+  repeated string asset_types = 3;
+
+  // Asset content type. If not specified, no content but the asset name will be
+  // returned.
+  ContentType content_type = 4;
+
+  // Required. Output configuration indicating where the results will be output
+  // to. All results will be in newline delimited JSON format.
+  OutputConfig output_config = 5;
+}
+
+// The export asset response. This message is returned by the
+// [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation] method in the returned
+// [google.longrunning.Operation.response][google.longrunning.Operation.response] field.
+message ExportAssetsResponse {
+  // Time the snapshot was taken.
+  google.protobuf.Timestamp read_time = 1;
+
+  // Output configuration indicating where the results were output to.
+  // All results are in JSON format.
+  OutputConfig output_config = 2;
+}
+
+// Batch get assets history request.
+message BatchGetAssetsHistoryRequest {
+  // Required. The relative name of the root asset. It can only be an
+  // organization number (such as "organizations/123"), a project ID (such as
+  // "projects/my-project-id")", or a project number (such as "projects/12345").
+  string parent = 1;
+
+  // A list of the full names of the assets. For example:
+  // `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+  // See [Resource
+  // Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+  // and [Resource Name
+  // Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
+  // for more info.
+  //
+  // The request becomes a no-op if the asset name list is empty, and the max
+  // size of the asset name list is 100 in one request.
+  repeated string asset_names = 2;
+
+  // Required. The content type.
+  ContentType content_type = 3;
+
+  // Optional. The time window for the asset history. Both start_time and
+  // end_time are optional and if set, it must be after 2018-10-02 UTC. If
+  // end_time is not set, it is default to current timestamp. If start_time is
+  // not set, the snapshot of the assets at end_time will be returned. The
+  // returned results contain all temporal assets whose time window overlap with
+  // read_time_window.
+  TimeWindow read_time_window = 4;
+}
+
+// Batch get assets history response.
+message BatchGetAssetsHistoryResponse {
+  // A list of assets with valid time windows.
+  repeated TemporalAsset assets = 1;
+}
+
+// Create asset feed request.
+message CreateFeedRequest {
+  // Required. The name of the project/folder/organization where this feed
+  // should be created in. It can only be an organization number (such as
+  // "organizations/123"), a folder number (such as "folders/123"), a project ID
+  // (such as "projects/my-project-id")", or a project number (such as
+  // "projects/12345").
+  string parent = 1;
+
+  // Required. This is the client-assigned asset feed identifier and it needs to
+  // be unique under a specific parent project/folder/organization.
+  string feed_id = 2;
+
+  // The feed details. The field `name` must be empty and it will be generated
+  // in the format of:
+  // projects/project_number/feeds/feed_id
+  // folders/folder_number/feeds/feed_id
+  // organizations/organization_number/feeds/feed_id
+  Feed feed = 3;
+}
+
+// Get asset feed request.
+message GetFeedRequest {
+  // The name of the Feed and it must be in the format of:
+  // projects/project_number/feeds/feed_id
+  // folders/folder_number/feeds/feed_id
+  // organizations/organization_number/feeds/feed_id
+  string name = 1;
+}
+
+// List asset feeds request.
+message ListFeedsRequest {
+  // Required. The parent project/folder/organization whose feeds are to be
+  // listed. It can only be using project/folder/organization number (such as
+  // "folders/12345")", or a project ID (such as "projects/my-project-id").
+  string parent = 1;
+}
+
+// List asset feeds response.
+message ListFeedsResponse {
+  // A list of feeds.
+  repeated Feed feeds = 1;
+}
+
+// Update asset feed request.
+message UpdateFeedRequest {
+  // The new values of feed details. It must match an existing feed and the
+  // field `name` must be in the format of:
+  // projects/project_number/feeds/feed_id or
+  // folders/folder_number/feeds/feed_id or
+  // organizations/organization_number/feeds/feed_id.
+  Feed feed = 1;
+
+  // Only updates the `feed` fields indicated by this mask.
+  // The field mask must not be empty, and it must not contain fields that
+  // are immutable or only set by the server.
+  google.protobuf.FieldMask update_mask = 2;
+}
+
+// Delete asset feed request.
+message DeleteFeedRequest {
+  // The name of the feed and it must be in the format of:
+  // projects/project_number/feeds/feed_id
+  // folders/folder_number/feeds/feed_id
+  // organizations/organization_number/feeds/feed_id
+  string name = 1;
+}
+
+// Output configuration for export assets destination.
+message OutputConfig {
+  // Asset export destination.
+  oneof destination {
+    // Destination on Cloud Storage.
+    GcsDestination gcs_destination = 1;
+
+    // Destination on Bigquery. The output table stores the fields in asset
+    // proto as columns in BigQuery. The resource/iam_policy field is converted
+    // to a record with each field to a column, except metadata to a single JSON
+    // string.
+    BigQueryDestination bigquery_destination = 2;
+  }
+}
+
+// A Cloud Storage location.
+message GcsDestination {
+  // Required.
+  oneof object_uri {
+    // The uri of the Cloud Storage object. It's the same uri that is used by
+    // gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
+    // Editing Object
+    // Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
+    // for more information.
+    string uri = 1;
+
+    // The uri prefix of all generated Cloud Storage objects. For example:
+    // "gs://bucket_name/object_name_prefix". Each object uri is in format:
+    // "gs://bucket_name/object_name_prefix/<asset type>/<shard number> and only
+    // contains assets for that type. <shard number> starts from 0. For example:
+    // "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is
+    // the first shard of output objects containing all
+    // compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be
+    // returned if file with the same name "gs://bucket_name/object_name_prefix"
+    // already exists.
+    string uri_prefix = 2;
+  }
+}
+
+// A Bigquery destination.
+message BigQueryDestination {
+  // Required. The BigQuery dataset in format
+  // "projects/projectId/datasets/datasetId", to which the snapshot result
+  // should be exported. If this dataset does not exist, the export call returns
+  // an error.
+  string dataset = 1;
+
+  // Required. The BigQuery table to which the snapshot result should be
+  // written. If this table does not exist, a new table with the given name
+  // will be created.
+  string table = 2;
+
+  // If the destination table already exists and this flag is `TRUE`, the
+  // table will be overwritten by the contents of assets snapshot. If the flag
+  // is not set and the destination table already exists, the export call
+  // returns an error.
+  bool force = 3;
+}
+
+// A Cloud Pubsub destination.
+message PubsubDestination {
+  // The name of the Cloud Pub/Sub topic to publish to.
+  // For example: `projects/PROJECT_ID/topics/TOPIC_ID`.
+  string topic = 1;
+}
+
+// Asset content type.
+enum ContentType {
+  // Unspecified content type.
+  CONTENT_TYPE_UNSPECIFIED = 0;
+
+  // Resource metadata.
+  RESOURCE = 1;
+
+  // The actual IAM policy set on a resource.
+  IAM_POLICY = 2;
+
+  // The IAM policy name for the IAM policy set on a resource.
+  IAM_POLICY_NAME = 3;
+
+  ORG_POLICY = 4;
+
+  // The Cloud Access context mananger Policy set on an asset.
+  ACCESS_POLICY = 5;
+}
+
+// Output configuration for asset feed destination.
+message FeedOutputConfig {
+  // Asset feed destination.
+  oneof destination {
+    // Destination on Cloud Pubsub.
+    PubsubDestination pubsub_destination = 1;
+  }
+}
+
+// An asset feed used to export asset updates to a destinations.
+// An asset feed filter controls what updates are exported.
+// The asset feed must be created within a project, organization, or
+// folder. Supported destinations are:
+// Cloud Pub/Sub topics.
+message Feed {
+  // Required. The format will be
+  // projects/{project_number}/feeds/{client-assigned_feed_identifier} or
+  // folders/{folder_number}/feeds/{client-assigned_feed_identifier} or
+  // organizations/{organization_number}/feeds/{client-assigned_feed_identifier}
+  //
+  // The client-assigned feed identifier must be unique within the parent
+  // project/folder/organization.
+  string name = 1;
+
+  // A list of the full names of the assets to receive updates. You must specify
+  // either or both of asset_names and asset_types. Only asset updates matching
+  // specified asset_names and asset_types are exported to the feed. For
+  // example:
+  // `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+  // See [Resource
+  // Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+  // for more info.
+  repeated string asset_names = 2;
+
+  // A list of types of the assets to receive updates. You must specify either
+  // or both of asset_names and asset_types. Only asset updates matching
+  // specified asset_names and asset_types are exported to the feed.
+  // For example:
+  // "compute.googleapis.com/Disk" See [Introduction to Cloud Asset
+  // Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
+  // for all supported asset types.
+  repeated string asset_types = 3;
+
+  // Asset content type. If not specified, no content but the asset name and
+  // type will be returned.
+  ContentType content_type = 4;
+
+  // Required. Feed output configuration defining where the asset updates are
+  // published to.
+  FeedOutputConfig feed_output_config = 5;
+}
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/assets.proto b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/assets.proto
new file mode 100644
index 000000000000..a9cda898a357
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/src/main/proto/google/cloud/asset/v1p2beta1/assets.proto
@@ -0,0 +1,135 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.cloud.asset.v1p2beta1;
+
+import "google/api/annotations.proto";
+import "google/iam/v1/policy.proto";
+import "google/protobuf/any.proto";
+import "google/protobuf/struct.proto";
+import "google/protobuf/timestamp.proto";
+
+option cc_enable_arenas = true;
+option csharp_namespace = "Google.Cloud.Asset.v1p2beta1";
+option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1p2beta1;asset";
+option java_multiple_files = true;
+option java_outer_classname = "AssetProto";
+option java_package = "com.google.cloud.asset.v1p2beta1";
+option php_namespace = "Google\\Cloud\\Asset\\v1p2beta1";
+
+// Temporal asset. In addition to the asset, the temporal asset includes the
+// status of the asset and valid from and to time of it.
+message TemporalAsset {
+  // The time window when the asset data and state was observed.
+  TimeWindow window = 1;
+
+  // If the asset is deleted or not.
+  bool deleted = 2;
+
+  // Asset.
+  Asset asset = 3;
+}
+
+// A time window of (start_time, end_time].
+message TimeWindow {
+  // Start time of the time window (exclusive).
+  google.protobuf.Timestamp start_time = 1;
+
+  // End time of the time window (inclusive).
+  // Current timestamp if not specified.
+  google.protobuf.Timestamp end_time = 2;
+}
+
+// Cloud asset. This includes all Google Cloud Platform resources,
+// Cloud IAM policies, and other non-GCP assets.
+message Asset {
+  // The full name of the asset. For example:
+  // `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
+  // See [Resource
+  // Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+  // for more information.
+  string name = 1;
+
+  // Type of the asset. Example: "compute.googleapis.com/Disk".
+  string asset_type = 2;
+
+  // Representation of the resource.
+  Resource resource = 3;
+
+  // Representation of the actual Cloud IAM policy set on a cloud resource. For
+  // each resource, there must be at most one Cloud IAM policy set on it.
+  google.iam.v1.Policy iam_policy = 4;
+
+  // Cloud IAM policy name of the Cloud IAM policy set on a cloud resource. For
+  // each resource, there must be at most one Cloud IAM policy name associated
+  // with it.
+  bytes iam_policy_name = 5;
+
+  // Asset's ancestry path in Cloud Resource Manager (CRM) hierarchy,
+  // represented as a list of relative resource names. Ancestry path starts with
+  // the closest CRM ancestor and ending at a visible root. If the asset is a
+  // CRM project/ folder/organization, this starts from the asset itself.
+  //
+  // Example: ["projects/123456789", "folders/5432", "organizations/1234"]
+  repeated string ancestors = 6;
+}
+
+// Representation of a cloud resource.
+message Resource {
+  // The API version. Example: "v1".
+  string version = 1;
+
+  // The URL of the discovery document containing the resource's JSON schema.
+  // For example:
+  // `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
+  // It will be left unspecified for resources without a discovery-based API,
+  // such as Cloud Bigtable.
+  string discovery_document_uri = 2;
+
+  // The JSON schema name listed in the discovery document.
+  // Example: "Project". It will be left unspecified for resources (such as
+  // Cloud Bigtable) without a discovery-based API.
+  string discovery_name = 3;
+
+  // The REST URL for accessing the resource. An HTTP GET operation using this
+  // URL returns the resource itself.
+  // Example:
+  // `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
+  // It will be left unspecified for resources without a REST API.
+  string resource_url = 4;
+
+  // The full name of the immediate parent of this resource. See
+  // [Resource
+  // Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
+  // for more information.
+  //
+  // For GCP assets, it is the parent resource defined in the [Cloud IAM policy
+  // hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
+  // For example:
+  // `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
+  //
+  // For third-party assets, it is up to the users to define.
+  string parent = 5;
+
+  // The content of the resource, in which some sensitive fields are scrubbed
+  // away and may not be present.
+  google.protobuf.Struct data = 6;
+
+  // The actual metadata content for the resource, only visible for internal
+  // users.
+  google.protobuf.Any internal_data = 7;
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceClient.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceClient.java
new file mode 100644
index 000000000000..db14576d9c80
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceClient.java
@@ -0,0 +1,763 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.longrunning.OperationFuture;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.api.pathtemplate.PathTemplate;
+import com.google.cloud.asset.v1p2beta1.stub.AssetServiceStub;
+import com.google.cloud.asset.v1p2beta1.stub.AssetServiceStubSettings;
+import com.google.longrunning.Operation;
+import com.google.longrunning.OperationsClient;
+import com.google.protobuf.Empty;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND SERVICE
+/**
+ * Service Description: Asset service definition.
+ *
+ * <p>This class provides the ability to make remote calls to the backing service through method
+ * calls that map to API methods. Sample code to get started:
+ *
+ * <pre>
+ * <code>
+ * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+ *   String parent = "";
+ *   BatchGetAssetsHistoryResponse response = assetServiceClient.batchGetAssetsHistory(parent);
+ * }
+ * </code>
+ * </pre>
+ *
+ * <p>Note: close() needs to be called on the assetServiceClient object to clean up resources such
+ * as threads. In the example above, try-with-resources is used, which automatically calls close().
+ *
+ * <p>The surface of this class includes several types of Java methods for each of the API's
+ * methods:
+ *
+ * <ol>
+ *   <li>A "flattened" method. With this type of method, the fields of the request type have been
+ *       converted into function parameters. It may be the case that not all fields are available as
+ *       parameters, and not every API method will have a flattened method entry point.
+ *   <li>A "request object" method. This type of method only takes one parameter, a request object,
+ *       which must be constructed before the call. Not every API method will have a request object
+ *       method.
+ *   <li>A "callable" method. This type of method takes no parameters and returns an immutable API
+ *       callable object, which can be used to initiate calls to the service.
+ * </ol>
+ *
+ * <p>See the individual methods for example code.
+ *
+ * <p>Many parameters require resource names to be formatted in a particular way. To assist with
+ * these names, this class includes a format method for each type of name, and additionally a parse
+ * method to extract the individual identifiers contained within names that are returned.
+ *
+ * <p>This class can be customized by passing in a custom instance of AssetServiceSettings to
+ * create(). For example:
+ *
+ * <p>To customize credentials:
+ *
+ * <pre>
+ * <code>
+ * AssetServiceSettings assetServiceSettings =
+ *     AssetServiceSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * AssetServiceClient assetServiceClient =
+ *     AssetServiceClient.create(assetServiceSettings);
+ * </code>
+ * </pre>
+ *
+ * To customize the endpoint:
+ *
+ * <pre>
+ * <code>
+ * AssetServiceSettings assetServiceSettings =
+ *     AssetServiceSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * AssetServiceClient assetServiceClient =
+ *     AssetServiceClient.create(assetServiceSettings);
+ * </code>
+ * </pre>
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class AssetServiceClient implements BackgroundResource {
+  private final AssetServiceSettings settings;
+  private final AssetServiceStub stub;
+  private final OperationsClient operationsClient;
+
+  private static final PathTemplate FEED_PATH_TEMPLATE =
+      PathTemplate.createWithoutUrlEncoding("projects/{project}/feeds/{feed}");
+
+  /**
+   * Formats a string containing the fully-qualified path to represent a feed resource.
+   *
+   * @deprecated Use the {@link FeedName} class instead.
+   */
+  @Deprecated
+  public static final String formatFeedName(String project, String feed) {
+    return FEED_PATH_TEMPLATE.instantiate(
+        "project", project,
+        "feed", feed);
+  }
+
+  /**
+   * Parses the project from the given fully-qualified path which represents a feed resource.
+   *
+   * @deprecated Use the {@link FeedName} class instead.
+   */
+  @Deprecated
+  public static final String parseProjectFromFeedName(String feedName) {
+    return FEED_PATH_TEMPLATE.parse(feedName).get("project");
+  }
+
+  /**
+   * Parses the feed from the given fully-qualified path which represents a feed resource.
+   *
+   * @deprecated Use the {@link FeedName} class instead.
+   */
+  @Deprecated
+  public static final String parseFeedFromFeedName(String feedName) {
+    return FEED_PATH_TEMPLATE.parse(feedName).get("feed");
+  }
+
+  /** Constructs an instance of AssetServiceClient with default settings. */
+  public static final AssetServiceClient create() throws IOException {
+    return create(AssetServiceSettings.newBuilder().build());
+  }
+
+  /**
+   * Constructs an instance of AssetServiceClient, using the given settings. The channels are
+   * created based on the settings passed in, or defaults for any settings that are not set.
+   */
+  public static final AssetServiceClient create(AssetServiceSettings settings) throws IOException {
+    return new AssetServiceClient(settings);
+  }
+
+  /**
+   * Constructs an instance of AssetServiceClient, using the given stub for making calls. This is
+   * for advanced usage - prefer to use AssetServiceSettings}.
+   */
+  @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+  public static final AssetServiceClient create(AssetServiceStub stub) {
+    return new AssetServiceClient(stub);
+  }
+
+  /**
+   * Constructs an instance of AssetServiceClient, using the given settings. This is protected so
+   * that it is easy to make a subclass, but otherwise, the static factory methods should be
+   * preferred.
+   */
+  protected AssetServiceClient(AssetServiceSettings settings) throws IOException {
+    this.settings = settings;
+    this.stub = ((AssetServiceStubSettings) settings.getStubSettings()).createStub();
+    this.operationsClient = OperationsClient.create(this.stub.getOperationsStub());
+  }
+
+  @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+  protected AssetServiceClient(AssetServiceStub stub) {
+    this.settings = null;
+    this.stub = stub;
+    this.operationsClient = OperationsClient.create(this.stub.getOperationsStub());
+  }
+
+  public final AssetServiceSettings getSettings() {
+    return settings;
+  }
+
+  @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+  public AssetServiceStub getStub() {
+    return stub;
+  }
+
+  /**
+   * Returns the OperationsClient that can be used to query the status of a long-running operation
+   * returned by another API method call.
+   */
+  @BetaApi(
+      "The surface for long-running operations is not stable yet and may change in the future.")
+  public final OperationsClient getOperationsClient() {
+    return operationsClient;
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Exports assets with time and resource types to a given Cloud Storage location. The output
+   * format is newline-delimited JSON. This API implements the
+   * [google.longrunning.Operation][google.longrunning.Operation] API allowing you to keep track of
+   * the export.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   OutputConfig outputConfig = OutputConfig.newBuilder().build();
+   *   ExportAssetsRequest request = ExportAssetsRequest.newBuilder()
+   *     .setParent(parent)
+   *     .setOutputConfig(outputConfig)
+   *     .build();
+   *   ExportAssetsResponse response = assetServiceClient.exportAssetsAsync(request).get();
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  @BetaApi(
+      "The surface for long-running operations is not stable yet and may change in the future.")
+  public final OperationFuture<ExportAssetsResponse, ExportAssetsRequest> exportAssetsAsync(
+      ExportAssetsRequest request) {
+    return exportAssetsOperationCallable().futureCall(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Exports assets with time and resource types to a given Cloud Storage location. The output
+   * format is newline-delimited JSON. This API implements the
+   * [google.longrunning.Operation][google.longrunning.Operation] API allowing you to keep track of
+   * the export.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   OutputConfig outputConfig = OutputConfig.newBuilder().build();
+   *   ExportAssetsRequest request = ExportAssetsRequest.newBuilder()
+   *     .setParent(parent)
+   *     .setOutputConfig(outputConfig)
+   *     .build();
+   *   OperationFuture&lt;ExportAssetsResponse, ExportAssetsRequest&gt; future = assetServiceClient.exportAssetsOperationCallable().futureCall(request);
+   *   // Do something
+   *   ExportAssetsResponse response = future.get();
+   * }
+   * </code></pre>
+   */
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public final OperationCallable<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationCallable() {
+    return stub.exportAssetsOperationCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Exports assets with time and resource types to a given Cloud Storage location. The output
+   * format is newline-delimited JSON. This API implements the
+   * [google.longrunning.Operation][google.longrunning.Operation] API allowing you to keep track of
+   * the export.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   OutputConfig outputConfig = OutputConfig.newBuilder().build();
+   *   ExportAssetsRequest request = ExportAssetsRequest.newBuilder()
+   *     .setParent(parent)
+   *     .setOutputConfig(outputConfig)
+   *     .build();
+   *   ApiFuture&lt;Operation&gt; future = assetServiceClient.exportAssetsCallable().futureCall(request);
+   *   // Do something
+   *   Operation response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<ExportAssetsRequest, Operation> exportAssetsCallable() {
+    return stub.exportAssetsCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Batch gets the update history of assets that overlap a time window. For RESOURCE content, this
+   * API outputs history with asset in both non-delete or deleted status. For IAM_POLICY content,
+   * this API outputs history when the asset and its attached IAM POLICY both exist. This can create
+   * gaps in the output history.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   BatchGetAssetsHistoryResponse response = assetServiceClient.batchGetAssetsHistory(parent);
+   * }
+   * </code></pre>
+   *
+   * @param parent Required. The relative name of the root asset. It can only be an organization
+   *     number (such as "organizations/123"), a project ID (such as "projects/my-project-id")", or
+   *     a project number (such as "projects/12345").
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final BatchGetAssetsHistoryResponse batchGetAssetsHistory(String parent) {
+
+    BatchGetAssetsHistoryRequest request =
+        BatchGetAssetsHistoryRequest.newBuilder().setParent(parent).build();
+    return batchGetAssetsHistory(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Batch gets the update history of assets that overlap a time window. For RESOURCE content, this
+   * API outputs history with asset in both non-delete or deleted status. For IAM_POLICY content,
+   * this API outputs history when the asset and its attached IAM POLICY both exist. This can create
+   * gaps in the output history.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   List&lt;String&gt; assetNames = new ArrayList&lt;&gt;();
+   *   ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
+   *   BatchGetAssetsHistoryRequest request = BatchGetAssetsHistoryRequest.newBuilder()
+   *     .setParent(parent)
+   *     .addAllAssetNames(assetNames)
+   *     .setContentType(contentType)
+   *     .build();
+   *   BatchGetAssetsHistoryResponse response = assetServiceClient.batchGetAssetsHistory(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final BatchGetAssetsHistoryResponse batchGetAssetsHistory(
+      BatchGetAssetsHistoryRequest request) {
+    return batchGetAssetsHistoryCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Batch gets the update history of assets that overlap a time window. For RESOURCE content, this
+   * API outputs history with asset in both non-delete or deleted status. For IAM_POLICY content,
+   * this API outputs history when the asset and its attached IAM POLICY both exist. This can create
+   * gaps in the output history.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   List&lt;String&gt; assetNames = new ArrayList&lt;&gt;();
+   *   ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
+   *   BatchGetAssetsHistoryRequest request = BatchGetAssetsHistoryRequest.newBuilder()
+   *     .setParent(parent)
+   *     .addAllAssetNames(assetNames)
+   *     .setContentType(contentType)
+   *     .build();
+   *   ApiFuture&lt;BatchGetAssetsHistoryResponse&gt; future = assetServiceClient.batchGetAssetsHistoryCallable().futureCall(request);
+   *   // Do something
+   *   BatchGetAssetsHistoryResponse response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistoryCallable() {
+    return stub.batchGetAssetsHistoryCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Creates a feed in a parent project/folder/organization to listen to its asset updates.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   Feed response = assetServiceClient.createFeed(parent);
+   * }
+   * </code></pre>
+   *
+   * @param parent Required. The name of the project/folder/organization where this feed should be
+   *     created in. It can only be an organization number (such as "organizations/123"), a folder
+   *     number (such as "folders/123"), a project ID (such as "projects/my-project-id")", or a
+   *     project number (such as "projects/12345").
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed createFeed(String parent) {
+
+    CreateFeedRequest request = CreateFeedRequest.newBuilder().setParent(parent).build();
+    return createFeed(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Creates a feed in a parent project/folder/organization to listen to its asset updates.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   String feedId = "";
+   *   Feed feed = Feed.newBuilder().build();
+   *   CreateFeedRequest request = CreateFeedRequest.newBuilder()
+   *     .setParent(parent)
+   *     .setFeedId(feedId)
+   *     .setFeed(feed)
+   *     .build();
+   *   Feed response = assetServiceClient.createFeed(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed createFeed(CreateFeedRequest request) {
+    return createFeedCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Creates a feed in a parent project/folder/organization to listen to its asset updates.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   String feedId = "";
+   *   Feed feed = Feed.newBuilder().build();
+   *   CreateFeedRequest request = CreateFeedRequest.newBuilder()
+   *     .setParent(parent)
+   *     .setFeedId(feedId)
+   *     .setFeed(feed)
+   *     .build();
+   *   ApiFuture&lt;Feed&gt; future = assetServiceClient.createFeedCallable().futureCall(request);
+   *   // Do something
+   *   Feed response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<CreateFeedRequest, Feed> createFeedCallable() {
+    return stub.createFeedCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Gets details about an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   Feed response = assetServiceClient.getFeed(formattedName);
+   * }
+   * </code></pre>
+   *
+   * @param name The name of the Feed and it must be in the format of:
+   *     projects/project_number/feeds/feed_id folders/folder_number/feeds/feed_id
+   *     organizations/organization_number/feeds/feed_id
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed getFeed(String name) {
+    FEED_PATH_TEMPLATE.validate(name, "getFeed");
+    GetFeedRequest request = GetFeedRequest.newBuilder().setName(name).build();
+    return getFeed(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Gets details about an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   GetFeedRequest request = GetFeedRequest.newBuilder()
+   *     .setName(formattedName)
+   *     .build();
+   *   Feed response = assetServiceClient.getFeed(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed getFeed(GetFeedRequest request) {
+    return getFeedCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Gets details about an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   GetFeedRequest request = GetFeedRequest.newBuilder()
+   *     .setName(formattedName)
+   *     .build();
+   *   ApiFuture&lt;Feed&gt; future = assetServiceClient.getFeedCallable().futureCall(request);
+   *   // Do something
+   *   Feed response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<GetFeedRequest, Feed> getFeedCallable() {
+    return stub.getFeedCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Lists all asset feeds in a parent project/folder/organization.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   ListFeedsResponse response = assetServiceClient.listFeeds(parent);
+   * }
+   * </code></pre>
+   *
+   * @param parent Required. The parent project/folder/organization whose feeds are to be listed. It
+   *     can only be using project/folder/organization number (such as "folders/12345")", or a
+   *     project ID (such as "projects/my-project-id").
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final ListFeedsResponse listFeeds(String parent) {
+
+    ListFeedsRequest request = ListFeedsRequest.newBuilder().setParent(parent).build();
+    return listFeeds(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Lists all asset feeds in a parent project/folder/organization.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   ListFeedsRequest request = ListFeedsRequest.newBuilder()
+   *     .setParent(parent)
+   *     .build();
+   *   ListFeedsResponse response = assetServiceClient.listFeeds(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final ListFeedsResponse listFeeds(ListFeedsRequest request) {
+    return listFeedsCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Lists all asset feeds in a parent project/folder/organization.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String parent = "";
+   *   ListFeedsRequest request = ListFeedsRequest.newBuilder()
+   *     .setParent(parent)
+   *     .build();
+   *   ApiFuture&lt;ListFeedsResponse&gt; future = assetServiceClient.listFeedsCallable().futureCall(request);
+   *   // Do something
+   *   ListFeedsResponse response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<ListFeedsRequest, ListFeedsResponse> listFeedsCallable() {
+    return stub.listFeedsCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Updates an asset feed configuration.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   Feed feed = Feed.newBuilder().build();
+   *   Feed response = assetServiceClient.updateFeed(feed);
+   * }
+   * </code></pre>
+   *
+   * @param feed The new values of feed details. It must match an existing feed and the field `name`
+   *     must be in the format of: projects/project_number/feeds/feed_id or
+   *     folders/folder_number/feeds/feed_id or organizations/organization_number/feeds/feed_id.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed updateFeed(Feed feed) {
+
+    UpdateFeedRequest request = UpdateFeedRequest.newBuilder().setFeed(feed).build();
+    return updateFeed(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Updates an asset feed configuration.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   Feed feed = Feed.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   UpdateFeedRequest request = UpdateFeedRequest.newBuilder()
+   *     .setFeed(feed)
+   *     .setUpdateMask(updateMask)
+   *     .build();
+   *   Feed response = assetServiceClient.updateFeed(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final Feed updateFeed(UpdateFeedRequest request) {
+    return updateFeedCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Updates an asset feed configuration.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   Feed feed = Feed.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   UpdateFeedRequest request = UpdateFeedRequest.newBuilder()
+   *     .setFeed(feed)
+   *     .setUpdateMask(updateMask)
+   *     .build();
+   *   ApiFuture&lt;Feed&gt; future = assetServiceClient.updateFeedCallable().futureCall(request);
+   *   // Do something
+   *   Feed response = future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<UpdateFeedRequest, Feed> updateFeedCallable() {
+    return stub.updateFeedCallable();
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Deletes an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   assetServiceClient.deleteFeed(formattedName);
+   * }
+   * </code></pre>
+   *
+   * @param name The name of the feed and it must be in the format of:
+   *     projects/project_number/feeds/feed_id folders/folder_number/feeds/feed_id
+   *     organizations/organization_number/feeds/feed_id
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final void deleteFeed(String name) {
+    FEED_PATH_TEMPLATE.validate(name, "deleteFeed");
+    DeleteFeedRequest request = DeleteFeedRequest.newBuilder().setName(name).build();
+    deleteFeed(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Deletes an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   DeleteFeedRequest request = DeleteFeedRequest.newBuilder()
+   *     .setName(formattedName)
+   *     .build();
+   *   assetServiceClient.deleteFeed(request);
+   * }
+   * </code></pre>
+   *
+   * @param request The request object containing all of the parameters for the API call.
+   * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+   */
+  public final void deleteFeed(DeleteFeedRequest request) {
+    deleteFeedCallable().call(request);
+  }
+
+  // AUTO-GENERATED DOCUMENTATION AND METHOD
+  /**
+   * Deletes an asset feed.
+   *
+   * <p>Sample code:
+   *
+   * <pre><code>
+   * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+   *   String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+   *   DeleteFeedRequest request = DeleteFeedRequest.newBuilder()
+   *     .setName(formattedName)
+   *     .build();
+   *   ApiFuture&lt;Void&gt; future = assetServiceClient.deleteFeedCallable().futureCall(request);
+   *   // Do something
+   *   future.get();
+   * }
+   * </code></pre>
+   */
+  public final UnaryCallable<DeleteFeedRequest, Empty> deleteFeedCallable() {
+    return stub.deleteFeedCallable();
+  }
+
+  @Override
+  public final void close() {
+    stub.close();
+  }
+
+  @Override
+  public void shutdown() {
+    stub.shutdown();
+  }
+
+  @Override
+  public boolean isShutdown() {
+    return stub.isShutdown();
+  }
+
+  @Override
+  public boolean isTerminated() {
+    return stub.isTerminated();
+  }
+
+  @Override
+  public void shutdownNow() {
+    stub.shutdownNow();
+  }
+
+  @Override
+  public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
+    return stub.awaitTermination(duration, unit);
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceSettings.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceSettings.java
new file mode 100644
index 000000000000..74fe1838bdb0
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/AssetServiceSettings.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.core.ApiFunction;
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.GoogleCredentialsProvider;
+import com.google.api.gax.core.InstantiatingExecutorProvider;
+import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.ClientSettings;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.TransportChannelProvider;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.cloud.asset.v1p2beta1.stub.AssetServiceStubSettings;
+import com.google.longrunning.Operation;
+import com.google.protobuf.Empty;
+import java.io.IOException;
+import java.util.List;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Settings class to configure an instance of {@link AssetServiceClient}.
+ *
+ * <p>The default instance has everything set to sensible defaults:
+ *
+ * <ul>
+ *   <li>The default service address (cloudasset.googleapis.com) and default port (443) are used.
+ *   <li>Credentials are acquired automatically through Application Default Credentials.
+ *   <li>Retries are configured for idempotent methods but not for non-idempotent methods.
+ * </ul>
+ *
+ * <p>The builder of this class is recursive, so contained classes are themselves builders. When
+ * build() is called, the tree of builders is called to create the complete settings object.
+ *
+ * <p>For example, to set the total timeout of batchGetAssetsHistory to 30 seconds:
+ *
+ * <pre>
+ * <code>
+ * AssetServiceSettings.Builder assetServiceSettingsBuilder =
+ *     AssetServiceSettings.newBuilder();
+ * assetServiceSettingsBuilder.batchGetAssetsHistorySettings().getRetrySettings().toBuilder()
+ *     .setTotalTimeout(Duration.ofSeconds(30));
+ * AssetServiceSettings assetServiceSettings = assetServiceSettingsBuilder.build();
+ * </code>
+ * </pre>
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class AssetServiceSettings extends ClientSettings<AssetServiceSettings> {
+  /** Returns the object with the settings used for calls to exportAssets. */
+  public UnaryCallSettings<ExportAssetsRequest, Operation> exportAssetsSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).exportAssetsSettings();
+  }
+
+  /** Returns the object with the settings used for calls to exportAssets. */
+  @BetaApi(
+      "The surface for long-running operations is not stable yet and may change in the future.")
+  public OperationCallSettings<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).exportAssetsOperationSettings();
+  }
+
+  /** Returns the object with the settings used for calls to batchGetAssetsHistory. */
+  public UnaryCallSettings<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistorySettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).batchGetAssetsHistorySettings();
+  }
+
+  /** Returns the object with the settings used for calls to createFeed. */
+  public UnaryCallSettings<CreateFeedRequest, Feed> createFeedSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).createFeedSettings();
+  }
+
+  /** Returns the object with the settings used for calls to getFeed. */
+  public UnaryCallSettings<GetFeedRequest, Feed> getFeedSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).getFeedSettings();
+  }
+
+  /** Returns the object with the settings used for calls to listFeeds. */
+  public UnaryCallSettings<ListFeedsRequest, ListFeedsResponse> listFeedsSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).listFeedsSettings();
+  }
+
+  /** Returns the object with the settings used for calls to updateFeed. */
+  public UnaryCallSettings<UpdateFeedRequest, Feed> updateFeedSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).updateFeedSettings();
+  }
+
+  /** Returns the object with the settings used for calls to deleteFeed. */
+  public UnaryCallSettings<DeleteFeedRequest, Empty> deleteFeedSettings() {
+    return ((AssetServiceStubSettings) getStubSettings()).deleteFeedSettings();
+  }
+
+  public static final AssetServiceSettings create(AssetServiceStubSettings stub)
+      throws IOException {
+    return new AssetServiceSettings.Builder(stub.toBuilder()).build();
+  }
+
+  /** Returns a builder for the default ExecutorProvider for this service. */
+  public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() {
+    return AssetServiceStubSettings.defaultExecutorProviderBuilder();
+  }
+
+  /** Returns the default service endpoint. */
+  public static String getDefaultEndpoint() {
+    return AssetServiceStubSettings.getDefaultEndpoint();
+  }
+
+  /** Returns the default service scopes. */
+  public static List<String> getDefaultServiceScopes() {
+    return AssetServiceStubSettings.getDefaultServiceScopes();
+  }
+
+  /** Returns a builder for the default credentials for this service. */
+  public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() {
+    return AssetServiceStubSettings.defaultCredentialsProviderBuilder();
+  }
+
+  /** Returns a builder for the default ChannelProvider for this service. */
+  public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() {
+    return AssetServiceStubSettings.defaultGrpcTransportProviderBuilder();
+  }
+
+  public static TransportChannelProvider defaultTransportChannelProvider() {
+    return AssetServiceStubSettings.defaultTransportChannelProvider();
+  }
+
+  @BetaApi("The surface for customizing headers is not stable yet and may change in the future.")
+  public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() {
+    return AssetServiceStubSettings.defaultApiClientHeaderProviderBuilder();
+  }
+
+  /** Returns a new builder for this class. */
+  public static Builder newBuilder() {
+    return Builder.createDefault();
+  }
+
+  /** Returns a new builder for this class. */
+  public static Builder newBuilder(ClientContext clientContext) {
+    return new Builder(clientContext);
+  }
+
+  /** Returns a builder containing all the values of this settings class. */
+  public Builder toBuilder() {
+    return new Builder(this);
+  }
+
+  protected AssetServiceSettings(Builder settingsBuilder) throws IOException {
+    super(settingsBuilder);
+  }
+
+  /** Builder for AssetServiceSettings. */
+  public static class Builder extends ClientSettings.Builder<AssetServiceSettings, Builder> {
+    protected Builder() throws IOException {
+      this((ClientContext) null);
+    }
+
+    protected Builder(ClientContext clientContext) {
+      super(AssetServiceStubSettings.newBuilder(clientContext));
+    }
+
+    private static Builder createDefault() {
+      return new Builder(AssetServiceStubSettings.newBuilder());
+    }
+
+    protected Builder(AssetServiceSettings settings) {
+      super(settings.getStubSettings().toBuilder());
+    }
+
+    protected Builder(AssetServiceStubSettings.Builder stubSettings) {
+      super(stubSettings);
+    }
+
+    public AssetServiceStubSettings.Builder getStubSettingsBuilder() {
+      return ((AssetServiceStubSettings.Builder) getStubSettings());
+    }
+
+    // NEXT_MAJOR_VER: remove 'throws Exception'
+    /**
+     * Applies the given settings updater function to all of the unary API methods in this service.
+     *
+     * <p>Note: This method does not support applying settings to streaming methods.
+     */
+    public Builder applyToAllUnaryMethods(
+        ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) throws Exception {
+      super.applyToAllUnaryMethods(
+          getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater);
+      return this;
+    }
+
+    /** Returns the builder for the settings used for calls to exportAssets. */
+    public UnaryCallSettings.Builder<ExportAssetsRequest, Operation> exportAssetsSettings() {
+      return getStubSettingsBuilder().exportAssetsSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to exportAssets. */
+    @BetaApi(
+        "The surface for long-running operations is not stable yet and may change in the future.")
+    public OperationCallSettings.Builder<
+            ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+        exportAssetsOperationSettings() {
+      return getStubSettingsBuilder().exportAssetsOperationSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to batchGetAssetsHistory. */
+    public UnaryCallSettings.Builder<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+        batchGetAssetsHistorySettings() {
+      return getStubSettingsBuilder().batchGetAssetsHistorySettings();
+    }
+
+    /** Returns the builder for the settings used for calls to createFeed. */
+    public UnaryCallSettings.Builder<CreateFeedRequest, Feed> createFeedSettings() {
+      return getStubSettingsBuilder().createFeedSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to getFeed. */
+    public UnaryCallSettings.Builder<GetFeedRequest, Feed> getFeedSettings() {
+      return getStubSettingsBuilder().getFeedSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to listFeeds. */
+    public UnaryCallSettings.Builder<ListFeedsRequest, ListFeedsResponse> listFeedsSettings() {
+      return getStubSettingsBuilder().listFeedsSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to updateFeed. */
+    public UnaryCallSettings.Builder<UpdateFeedRequest, Feed> updateFeedSettings() {
+      return getStubSettingsBuilder().updateFeedSettings();
+    }
+
+    /** Returns the builder for the settings used for calls to deleteFeed. */
+    public UnaryCallSettings.Builder<DeleteFeedRequest, Empty> deleteFeedSettings() {
+      return getStubSettingsBuilder().deleteFeedSettings();
+    }
+
+    @Override
+    public AssetServiceSettings build() throws IOException {
+      return new AssetServiceSettings(this);
+    }
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/package-info.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/package-info.java
new file mode 100644
index 000000000000..a3523892f0b3
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/package-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A client to Cloud Asset API.
+ *
+ * <p>The interfaces provided are listed below, along with usage samples.
+ *
+ * <p>================== AssetServiceClient ==================
+ *
+ * <p>Service Description: Asset service definition.
+ *
+ * <p>Sample for AssetServiceClient:
+ *
+ * <pre>
+ * <code>
+ * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+ *   String parent = "";
+ *   BatchGetAssetsHistoryResponse response = assetServiceClient.batchGetAssetsHistory(parent);
+ * }
+ * </code>
+ * </pre>
+ */
+@Generated("by gapic-generator")
+package com.google.cloud.asset.v1p2beta1;
+
+import javax.annotation.Generated;
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStub.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStub.java
new file mode 100644
index 000000000000..e1fedfd08735
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStub.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1.stub;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse;
+import com.google.cloud.asset.v1p2beta1.CreateFeedRequest;
+import com.google.cloud.asset.v1p2beta1.DeleteFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsResponse;
+import com.google.cloud.asset.v1p2beta1.Feed;
+import com.google.cloud.asset.v1p2beta1.GetFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsResponse;
+import com.google.cloud.asset.v1p2beta1.UpdateFeedRequest;
+import com.google.longrunning.Operation;
+import com.google.longrunning.stub.OperationsStub;
+import com.google.protobuf.Empty;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Base stub class for Cloud Asset API.
+ *
+ * <p>This class is for advanced usage and reflects the underlying API directly.
+ */
+@Generated("by gapic-generator")
+@BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+public abstract class AssetServiceStub implements BackgroundResource {
+
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public OperationsStub getOperationsStub() {
+    throw new UnsupportedOperationException("Not implemented: getOperationsStub()");
+  }
+
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public OperationCallable<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationCallable() {
+    throw new UnsupportedOperationException("Not implemented: exportAssetsOperationCallable()");
+  }
+
+  public UnaryCallable<ExportAssetsRequest, Operation> exportAssetsCallable() {
+    throw new UnsupportedOperationException("Not implemented: exportAssetsCallable()");
+  }
+
+  public UnaryCallable<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistoryCallable() {
+    throw new UnsupportedOperationException("Not implemented: batchGetAssetsHistoryCallable()");
+  }
+
+  public UnaryCallable<CreateFeedRequest, Feed> createFeedCallable() {
+    throw new UnsupportedOperationException("Not implemented: createFeedCallable()");
+  }
+
+  public UnaryCallable<GetFeedRequest, Feed> getFeedCallable() {
+    throw new UnsupportedOperationException("Not implemented: getFeedCallable()");
+  }
+
+  public UnaryCallable<ListFeedsRequest, ListFeedsResponse> listFeedsCallable() {
+    throw new UnsupportedOperationException("Not implemented: listFeedsCallable()");
+  }
+
+  public UnaryCallable<UpdateFeedRequest, Feed> updateFeedCallable() {
+    throw new UnsupportedOperationException("Not implemented: updateFeedCallable()");
+  }
+
+  public UnaryCallable<DeleteFeedRequest, Empty> deleteFeedCallable() {
+    throw new UnsupportedOperationException("Not implemented: deleteFeedCallable()");
+  }
+
+  @Override
+  public abstract void close();
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStubSettings.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStubSettings.java
new file mode 100644
index 000000000000..919dbbed8b1a
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/AssetServiceStubSettings.java
@@ -0,0 +1,475 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1.stub;
+
+import com.google.api.core.ApiFunction;
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.GaxProperties;
+import com.google.api.gax.core.GoogleCredentialsProvider;
+import com.google.api.gax.core.InstantiatingExecutorProvider;
+import com.google.api.gax.grpc.GaxGrpcProperties;
+import com.google.api.gax.grpc.GrpcTransportChannel;
+import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
+import com.google.api.gax.grpc.ProtoOperationTransformers;
+import com.google.api.gax.longrunning.OperationSnapshot;
+import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
+import com.google.api.gax.retrying.RetrySettings;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.StatusCode;
+import com.google.api.gax.rpc.StubSettings;
+import com.google.api.gax.rpc.TransportChannelProvider;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse;
+import com.google.cloud.asset.v1p2beta1.CreateFeedRequest;
+import com.google.cloud.asset.v1p2beta1.DeleteFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsResponse;
+import com.google.cloud.asset.v1p2beta1.Feed;
+import com.google.cloud.asset.v1p2beta1.GetFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsResponse;
+import com.google.cloud.asset.v1p2beta1.UpdateFeedRequest;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.longrunning.Operation;
+import com.google.protobuf.Empty;
+import java.io.IOException;
+import java.util.List;
+import javax.annotation.Generated;
+import org.threeten.bp.Duration;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Settings class to configure an instance of {@link AssetServiceStub}.
+ *
+ * <p>The default instance has everything set to sensible defaults:
+ *
+ * <ul>
+ *   <li>The default service address (cloudasset.googleapis.com) and default port (443) are used.
+ *   <li>Credentials are acquired automatically through Application Default Credentials.
+ *   <li>Retries are configured for idempotent methods but not for non-idempotent methods.
+ * </ul>
+ *
+ * <p>The builder of this class is recursive, so contained classes are themselves builders. When
+ * build() is called, the tree of builders is called to create the complete settings object.
+ *
+ * <p>For example, to set the total timeout of batchGetAssetsHistory to 30 seconds:
+ *
+ * <pre>
+ * <code>
+ * AssetServiceStubSettings.Builder assetServiceSettingsBuilder =
+ *     AssetServiceStubSettings.newBuilder();
+ * assetServiceSettingsBuilder.batchGetAssetsHistorySettings().getRetrySettings().toBuilder()
+ *     .setTotalTimeout(Duration.ofSeconds(30));
+ * AssetServiceStubSettings assetServiceSettings = assetServiceSettingsBuilder.build();
+ * </code>
+ * </pre>
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class AssetServiceStubSettings extends StubSettings<AssetServiceStubSettings> {
+  /** The default scopes of the service. */
+  private static final ImmutableList<String> DEFAULT_SERVICE_SCOPES =
+      ImmutableList.<String>builder().add("https://www.googleapis.com/auth/cloud-platform").build();
+
+  private final UnaryCallSettings<ExportAssetsRequest, Operation> exportAssetsSettings;
+  private final OperationCallSettings<
+          ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationSettings;
+  private final UnaryCallSettings<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistorySettings;
+  private final UnaryCallSettings<CreateFeedRequest, Feed> createFeedSettings;
+  private final UnaryCallSettings<GetFeedRequest, Feed> getFeedSettings;
+  private final UnaryCallSettings<ListFeedsRequest, ListFeedsResponse> listFeedsSettings;
+  private final UnaryCallSettings<UpdateFeedRequest, Feed> updateFeedSettings;
+  private final UnaryCallSettings<DeleteFeedRequest, Empty> deleteFeedSettings;
+
+  /** Returns the object with the settings used for calls to exportAssets. */
+  public UnaryCallSettings<ExportAssetsRequest, Operation> exportAssetsSettings() {
+    return exportAssetsSettings;
+  }
+
+  /** Returns the object with the settings used for calls to exportAssets. */
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public OperationCallSettings<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationSettings() {
+    return exportAssetsOperationSettings;
+  }
+
+  /** Returns the object with the settings used for calls to batchGetAssetsHistory. */
+  public UnaryCallSettings<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistorySettings() {
+    return batchGetAssetsHistorySettings;
+  }
+
+  /** Returns the object with the settings used for calls to createFeed. */
+  public UnaryCallSettings<CreateFeedRequest, Feed> createFeedSettings() {
+    return createFeedSettings;
+  }
+
+  /** Returns the object with the settings used for calls to getFeed. */
+  public UnaryCallSettings<GetFeedRequest, Feed> getFeedSettings() {
+    return getFeedSettings;
+  }
+
+  /** Returns the object with the settings used for calls to listFeeds. */
+  public UnaryCallSettings<ListFeedsRequest, ListFeedsResponse> listFeedsSettings() {
+    return listFeedsSettings;
+  }
+
+  /** Returns the object with the settings used for calls to updateFeed. */
+  public UnaryCallSettings<UpdateFeedRequest, Feed> updateFeedSettings() {
+    return updateFeedSettings;
+  }
+
+  /** Returns the object with the settings used for calls to deleteFeed. */
+  public UnaryCallSettings<DeleteFeedRequest, Empty> deleteFeedSettings() {
+    return deleteFeedSettings;
+  }
+
+  @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+  public AssetServiceStub createStub() throws IOException {
+    if (getTransportChannelProvider()
+        .getTransportName()
+        .equals(GrpcTransportChannel.getGrpcTransportName())) {
+      return GrpcAssetServiceStub.create(this);
+    } else {
+      throw new UnsupportedOperationException(
+          "Transport not supported: " + getTransportChannelProvider().getTransportName());
+    }
+  }
+
+  /** Returns a builder for the default ExecutorProvider for this service. */
+  public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() {
+    return InstantiatingExecutorProvider.newBuilder();
+  }
+
+  /** Returns the default service endpoint. */
+  public static String getDefaultEndpoint() {
+    return "cloudasset.googleapis.com:443";
+  }
+
+  /** Returns the default service scopes. */
+  public static List<String> getDefaultServiceScopes() {
+    return DEFAULT_SERVICE_SCOPES;
+  }
+
+  /** Returns a builder for the default credentials for this service. */
+  public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() {
+    return GoogleCredentialsProvider.newBuilder().setScopesToApply(DEFAULT_SERVICE_SCOPES);
+  }
+
+  /** Returns a builder for the default ChannelProvider for this service. */
+  public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() {
+    return InstantiatingGrpcChannelProvider.newBuilder()
+        .setMaxInboundMessageSize(Integer.MAX_VALUE);
+  }
+
+  public static TransportChannelProvider defaultTransportChannelProvider() {
+    return defaultGrpcTransportProviderBuilder().build();
+  }
+
+  @BetaApi("The surface for customizing headers is not stable yet and may change in the future.")
+  public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() {
+    return ApiClientHeaderProvider.newBuilder()
+        .setGeneratedLibToken(
+            "gapic", GaxProperties.getLibraryVersion(AssetServiceStubSettings.class))
+        .setTransportToken(
+            GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion());
+  }
+
+  /** Returns a new builder for this class. */
+  public static Builder newBuilder() {
+    return Builder.createDefault();
+  }
+
+  /** Returns a new builder for this class. */
+  public static Builder newBuilder(ClientContext clientContext) {
+    return new Builder(clientContext);
+  }
+
+  /** Returns a builder containing all the values of this settings class. */
+  public Builder toBuilder() {
+    return new Builder(this);
+  }
+
+  protected AssetServiceStubSettings(Builder settingsBuilder) throws IOException {
+    super(settingsBuilder);
+
+    exportAssetsSettings = settingsBuilder.exportAssetsSettings().build();
+    exportAssetsOperationSettings = settingsBuilder.exportAssetsOperationSettings().build();
+    batchGetAssetsHistorySettings = settingsBuilder.batchGetAssetsHistorySettings().build();
+    createFeedSettings = settingsBuilder.createFeedSettings().build();
+    getFeedSettings = settingsBuilder.getFeedSettings().build();
+    listFeedsSettings = settingsBuilder.listFeedsSettings().build();
+    updateFeedSettings = settingsBuilder.updateFeedSettings().build();
+    deleteFeedSettings = settingsBuilder.deleteFeedSettings().build();
+  }
+
+  /** Builder for AssetServiceStubSettings. */
+  public static class Builder extends StubSettings.Builder<AssetServiceStubSettings, Builder> {
+    private final ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders;
+
+    private final UnaryCallSettings.Builder<ExportAssetsRequest, Operation> exportAssetsSettings;
+    private final OperationCallSettings.Builder<
+            ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+        exportAssetsOperationSettings;
+    private final UnaryCallSettings.Builder<
+            BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+        batchGetAssetsHistorySettings;
+    private final UnaryCallSettings.Builder<CreateFeedRequest, Feed> createFeedSettings;
+    private final UnaryCallSettings.Builder<GetFeedRequest, Feed> getFeedSettings;
+    private final UnaryCallSettings.Builder<ListFeedsRequest, ListFeedsResponse> listFeedsSettings;
+    private final UnaryCallSettings.Builder<UpdateFeedRequest, Feed> updateFeedSettings;
+    private final UnaryCallSettings.Builder<DeleteFeedRequest, Empty> deleteFeedSettings;
+
+    private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>>
+        RETRYABLE_CODE_DEFINITIONS;
+
+    static {
+      ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions =
+          ImmutableMap.builder();
+      definitions.put(
+          "idempotent",
+          ImmutableSet.copyOf(
+              Lists.<StatusCode.Code>newArrayList(
+                  StatusCode.Code.DEADLINE_EXCEEDED, StatusCode.Code.UNAVAILABLE)));
+      definitions.put("non_idempotent", ImmutableSet.copyOf(Lists.<StatusCode.Code>newArrayList()));
+      RETRYABLE_CODE_DEFINITIONS = definitions.build();
+    }
+
+    private static final ImmutableMap<String, RetrySettings> RETRY_PARAM_DEFINITIONS;
+
+    static {
+      ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder();
+      RetrySettings settings = null;
+      settings =
+          RetrySettings.newBuilder()
+              .setInitialRetryDelay(Duration.ofMillis(100L))
+              .setRetryDelayMultiplier(1.3)
+              .setMaxRetryDelay(Duration.ofMillis(60000L))
+              .setInitialRpcTimeout(Duration.ofMillis(20000L))
+              .setRpcTimeoutMultiplier(1.0)
+              .setMaxRpcTimeout(Duration.ofMillis(20000L))
+              .setTotalTimeout(Duration.ofMillis(600000L))
+              .build();
+      definitions.put("default", settings);
+      RETRY_PARAM_DEFINITIONS = definitions.build();
+    }
+
+    protected Builder() {
+      this((ClientContext) null);
+    }
+
+    protected Builder(ClientContext clientContext) {
+      super(clientContext);
+
+      exportAssetsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      exportAssetsOperationSettings = OperationCallSettings.newBuilder();
+
+      batchGetAssetsHistorySettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      createFeedSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      getFeedSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      listFeedsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      updateFeedSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      deleteFeedSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+      unaryMethodSettingsBuilders =
+          ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(
+              exportAssetsSettings,
+              batchGetAssetsHistorySettings,
+              createFeedSettings,
+              getFeedSettings,
+              listFeedsSettings,
+              updateFeedSettings,
+              deleteFeedSettings);
+
+      initDefaults(this);
+    }
+
+    private static Builder createDefault() {
+      Builder builder = new Builder((ClientContext) null);
+      builder.setTransportChannelProvider(defaultTransportChannelProvider());
+      builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build());
+      builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build());
+      builder.setEndpoint(getDefaultEndpoint());
+      return initDefaults(builder);
+    }
+
+    private static Builder initDefaults(Builder builder) {
+
+      builder
+          .exportAssetsSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .batchGetAssetsHistorySettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .createFeedSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .getFeedSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .listFeedsSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .updateFeedSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+      builder
+          .deleteFeedSettings()
+          .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+          .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+      builder
+          .exportAssetsOperationSettings()
+          .setInitialCallSettings(
+              UnaryCallSettings
+                  .<ExportAssetsRequest, OperationSnapshot>newUnaryCallSettingsBuilder()
+                  .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+                  .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"))
+                  .build())
+          .setResponseTransformer(
+              ProtoOperationTransformers.ResponseTransformer.create(ExportAssetsResponse.class))
+          .setMetadataTransformer(
+              ProtoOperationTransformers.MetadataTransformer.create(ExportAssetsRequest.class))
+          .setPollingAlgorithm(
+              OperationTimedPollAlgorithm.create(
+                  RetrySettings.newBuilder()
+                      .setInitialRetryDelay(Duration.ofMillis(500L))
+                      .setRetryDelayMultiplier(1.5)
+                      .setMaxRetryDelay(Duration.ofMillis(5000L))
+                      .setInitialRpcTimeout(Duration.ZERO) // ignored
+                      .setRpcTimeoutMultiplier(1.0) // ignored
+                      .setMaxRpcTimeout(Duration.ZERO) // ignored
+                      .setTotalTimeout(Duration.ofMillis(300000L))
+                      .build()));
+
+      return builder;
+    }
+
+    protected Builder(AssetServiceStubSettings settings) {
+      super(settings);
+
+      exportAssetsSettings = settings.exportAssetsSettings.toBuilder();
+      exportAssetsOperationSettings = settings.exportAssetsOperationSettings.toBuilder();
+      batchGetAssetsHistorySettings = settings.batchGetAssetsHistorySettings.toBuilder();
+      createFeedSettings = settings.createFeedSettings.toBuilder();
+      getFeedSettings = settings.getFeedSettings.toBuilder();
+      listFeedsSettings = settings.listFeedsSettings.toBuilder();
+      updateFeedSettings = settings.updateFeedSettings.toBuilder();
+      deleteFeedSettings = settings.deleteFeedSettings.toBuilder();
+
+      unaryMethodSettingsBuilders =
+          ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(
+              exportAssetsSettings,
+              batchGetAssetsHistorySettings,
+              createFeedSettings,
+              getFeedSettings,
+              listFeedsSettings,
+              updateFeedSettings,
+              deleteFeedSettings);
+    }
+
+    // NEXT_MAJOR_VER: remove 'throws Exception'
+    /**
+     * Applies the given settings updater function to all of the unary API methods in this service.
+     *
+     * <p>Note: This method does not support applying settings to streaming methods.
+     */
+    public Builder applyToAllUnaryMethods(
+        ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) throws Exception {
+      super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater);
+      return this;
+    }
+
+    public ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders() {
+      return unaryMethodSettingsBuilders;
+    }
+
+    /** Returns the builder for the settings used for calls to exportAssets. */
+    public UnaryCallSettings.Builder<ExportAssetsRequest, Operation> exportAssetsSettings() {
+      return exportAssetsSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to exportAssets. */
+    @BetaApi(
+        "The surface for use by generated code is not stable yet and may change in the future.")
+    public OperationCallSettings.Builder<
+            ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+        exportAssetsOperationSettings() {
+      return exportAssetsOperationSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to batchGetAssetsHistory. */
+    public UnaryCallSettings.Builder<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+        batchGetAssetsHistorySettings() {
+      return batchGetAssetsHistorySettings;
+    }
+
+    /** Returns the builder for the settings used for calls to createFeed. */
+    public UnaryCallSettings.Builder<CreateFeedRequest, Feed> createFeedSettings() {
+      return createFeedSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to getFeed. */
+    public UnaryCallSettings.Builder<GetFeedRequest, Feed> getFeedSettings() {
+      return getFeedSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to listFeeds. */
+    public UnaryCallSettings.Builder<ListFeedsRequest, ListFeedsResponse> listFeedsSettings() {
+      return listFeedsSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to updateFeed. */
+    public UnaryCallSettings.Builder<UpdateFeedRequest, Feed> updateFeedSettings() {
+      return updateFeedSettings;
+    }
+
+    /** Returns the builder for the settings used for calls to deleteFeed. */
+    public UnaryCallSettings.Builder<DeleteFeedRequest, Empty> deleteFeedSettings() {
+      return deleteFeedSettings;
+    }
+
+    @Override
+    public AssetServiceStubSettings build() throws IOException {
+      return new AssetServiceStubSettings(this);
+    }
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceCallableFactory.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceCallableFactory.java
new file mode 100644
index 000000000000..4d0fb9ab15c2
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceCallableFactory.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1.stub;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.grpc.GrpcCallSettings;
+import com.google.api.gax.grpc.GrpcCallableFactory;
+import com.google.api.gax.grpc.GrpcStubCallableFactory;
+import com.google.api.gax.rpc.BatchingCallSettings;
+import com.google.api.gax.rpc.BidiStreamingCallable;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.ClientStreamingCallable;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.PagedCallSettings;
+import com.google.api.gax.rpc.ServerStreamingCallSettings;
+import com.google.api.gax.rpc.ServerStreamingCallable;
+import com.google.api.gax.rpc.StreamingCallSettings;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.longrunning.stub.OperationsStub;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * gRPC callable factory implementation for Cloud Asset API.
+ *
+ * <p>This class is for advanced usage.
+ */
+@Generated("by gapic-generator")
+@BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+public class GrpcAssetServiceCallableFactory implements GrpcStubCallableFactory {
+  @Override
+  public <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable(
+      GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+      UnaryCallSettings<RequestT, ResponseT> callSettings,
+      ClientContext clientContext) {
+    return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext);
+  }
+
+  @Override
+  public <RequestT, ResponseT, PagedListResponseT>
+      UnaryCallable<RequestT, PagedListResponseT> createPagedCallable(
+          GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+          PagedCallSettings<RequestT, ResponseT, PagedListResponseT> pagedCallSettings,
+          ClientContext clientContext) {
+    return GrpcCallableFactory.createPagedCallable(
+        grpcCallSettings, pagedCallSettings, clientContext);
+  }
+
+  @Override
+  public <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createBatchingCallable(
+      GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+      BatchingCallSettings<RequestT, ResponseT> batchingCallSettings,
+      ClientContext clientContext) {
+    return GrpcCallableFactory.createBatchingCallable(
+        grpcCallSettings, batchingCallSettings, clientContext);
+  }
+
+  @BetaApi(
+      "The surface for long-running operations is not stable yet and may change in the future.")
+  @Override
+  public <RequestT, ResponseT, MetadataT>
+      OperationCallable<RequestT, ResponseT, MetadataT> createOperationCallable(
+          GrpcCallSettings<RequestT, com.google.longrunning.Operation> grpcCallSettings,
+          OperationCallSettings<RequestT, ResponseT, MetadataT> operationCallSettings,
+          ClientContext clientContext,
+          OperationsStub operationsStub) {
+    return GrpcCallableFactory.createOperationCallable(
+        grpcCallSettings, operationCallSettings, clientContext, operationsStub);
+  }
+
+  @Override
+  public <RequestT, ResponseT>
+      BidiStreamingCallable<RequestT, ResponseT> createBidiStreamingCallable(
+          GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+          StreamingCallSettings<RequestT, ResponseT> streamingCallSettings,
+          ClientContext clientContext) {
+    return GrpcCallableFactory.createBidiStreamingCallable(
+        grpcCallSettings, streamingCallSettings, clientContext);
+  }
+
+  @Override
+  public <RequestT, ResponseT>
+      ServerStreamingCallable<RequestT, ResponseT> createServerStreamingCallable(
+          GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+          ServerStreamingCallSettings<RequestT, ResponseT> streamingCallSettings,
+          ClientContext clientContext) {
+    return GrpcCallableFactory.createServerStreamingCallable(
+        grpcCallSettings, streamingCallSettings, clientContext);
+  }
+
+  @Override
+  public <RequestT, ResponseT>
+      ClientStreamingCallable<RequestT, ResponseT> createClientStreamingCallable(
+          GrpcCallSettings<RequestT, ResponseT> grpcCallSettings,
+          StreamingCallSettings<RequestT, ResponseT> streamingCallSettings,
+          ClientContext clientContext) {
+    return GrpcCallableFactory.createClientStreamingCallable(
+        grpcCallSettings, streamingCallSettings, clientContext);
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceStub.java b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceStub.java
new file mode 100644
index 000000000000..fa4001bdd4f1
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/main/java/com/google/cloud/asset/v1p2beta1/stub/GrpcAssetServiceStub.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1.stub;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.core.BackgroundResourceAggregation;
+import com.google.api.gax.grpc.GrpcCallSettings;
+import com.google.api.gax.grpc.GrpcStubCallableFactory;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.RequestParamsExtractor;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryRequest;
+import com.google.cloud.asset.v1p2beta1.BatchGetAssetsHistoryResponse;
+import com.google.cloud.asset.v1p2beta1.CreateFeedRequest;
+import com.google.cloud.asset.v1p2beta1.DeleteFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsRequest;
+import com.google.cloud.asset.v1p2beta1.ExportAssetsResponse;
+import com.google.cloud.asset.v1p2beta1.Feed;
+import com.google.cloud.asset.v1p2beta1.GetFeedRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsRequest;
+import com.google.cloud.asset.v1p2beta1.ListFeedsResponse;
+import com.google.cloud.asset.v1p2beta1.UpdateFeedRequest;
+import com.google.common.collect.ImmutableMap;
+import com.google.longrunning.Operation;
+import com.google.longrunning.stub.GrpcOperationsStub;
+import com.google.protobuf.Empty;
+import io.grpc.MethodDescriptor;
+import io.grpc.protobuf.ProtoUtils;
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * gRPC stub implementation for Cloud Asset API.
+ *
+ * <p>This class is for advanced usage and reflects the underlying API directly.
+ */
+@Generated("by gapic-generator")
+@BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+public class GrpcAssetServiceStub extends AssetServiceStub {
+
+  private static final MethodDescriptor<ExportAssetsRequest, Operation>
+      exportAssetsMethodDescriptor =
+          MethodDescriptor.<ExportAssetsRequest, Operation>newBuilder()
+              .setType(MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/ExportAssets")
+              .setRequestMarshaller(ProtoUtils.marshaller(ExportAssetsRequest.getDefaultInstance()))
+              .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance()))
+              .build();
+  private static final MethodDescriptor<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistoryMethodDescriptor =
+          MethodDescriptor.<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>newBuilder()
+              .setType(MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/BatchGetAssetsHistory")
+              .setRequestMarshaller(
+                  ProtoUtils.marshaller(BatchGetAssetsHistoryRequest.getDefaultInstance()))
+              .setResponseMarshaller(
+                  ProtoUtils.marshaller(BatchGetAssetsHistoryResponse.getDefaultInstance()))
+              .build();
+  private static final MethodDescriptor<CreateFeedRequest, Feed> createFeedMethodDescriptor =
+      MethodDescriptor.<CreateFeedRequest, Feed>newBuilder()
+          .setType(MethodDescriptor.MethodType.UNARY)
+          .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/CreateFeed")
+          .setRequestMarshaller(ProtoUtils.marshaller(CreateFeedRequest.getDefaultInstance()))
+          .setResponseMarshaller(ProtoUtils.marshaller(Feed.getDefaultInstance()))
+          .build();
+  private static final MethodDescriptor<GetFeedRequest, Feed> getFeedMethodDescriptor =
+      MethodDescriptor.<GetFeedRequest, Feed>newBuilder()
+          .setType(MethodDescriptor.MethodType.UNARY)
+          .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/GetFeed")
+          .setRequestMarshaller(ProtoUtils.marshaller(GetFeedRequest.getDefaultInstance()))
+          .setResponseMarshaller(ProtoUtils.marshaller(Feed.getDefaultInstance()))
+          .build();
+  private static final MethodDescriptor<ListFeedsRequest, ListFeedsResponse>
+      listFeedsMethodDescriptor =
+          MethodDescriptor.<ListFeedsRequest, ListFeedsResponse>newBuilder()
+              .setType(MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/ListFeeds")
+              .setRequestMarshaller(ProtoUtils.marshaller(ListFeedsRequest.getDefaultInstance()))
+              .setResponseMarshaller(ProtoUtils.marshaller(ListFeedsResponse.getDefaultInstance()))
+              .build();
+  private static final MethodDescriptor<UpdateFeedRequest, Feed> updateFeedMethodDescriptor =
+      MethodDescriptor.<UpdateFeedRequest, Feed>newBuilder()
+          .setType(MethodDescriptor.MethodType.UNARY)
+          .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/UpdateFeed")
+          .setRequestMarshaller(ProtoUtils.marshaller(UpdateFeedRequest.getDefaultInstance()))
+          .setResponseMarshaller(ProtoUtils.marshaller(Feed.getDefaultInstance()))
+          .build();
+  private static final MethodDescriptor<DeleteFeedRequest, Empty> deleteFeedMethodDescriptor =
+      MethodDescriptor.<DeleteFeedRequest, Empty>newBuilder()
+          .setType(MethodDescriptor.MethodType.UNARY)
+          .setFullMethodName("google.cloud.asset.v1p2beta1.AssetService/DeleteFeed")
+          .setRequestMarshaller(ProtoUtils.marshaller(DeleteFeedRequest.getDefaultInstance()))
+          .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance()))
+          .build();
+
+  private final BackgroundResource backgroundResources;
+  private final GrpcOperationsStub operationsStub;
+
+  private final UnaryCallable<ExportAssetsRequest, Operation> exportAssetsCallable;
+  private final OperationCallable<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationCallable;
+  private final UnaryCallable<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistoryCallable;
+  private final UnaryCallable<CreateFeedRequest, Feed> createFeedCallable;
+  private final UnaryCallable<GetFeedRequest, Feed> getFeedCallable;
+  private final UnaryCallable<ListFeedsRequest, ListFeedsResponse> listFeedsCallable;
+  private final UnaryCallable<UpdateFeedRequest, Feed> updateFeedCallable;
+  private final UnaryCallable<DeleteFeedRequest, Empty> deleteFeedCallable;
+
+  private final GrpcStubCallableFactory callableFactory;
+
+  public static final GrpcAssetServiceStub create(AssetServiceStubSettings settings)
+      throws IOException {
+    return new GrpcAssetServiceStub(settings, ClientContext.create(settings));
+  }
+
+  public static final GrpcAssetServiceStub create(ClientContext clientContext) throws IOException {
+    return new GrpcAssetServiceStub(AssetServiceStubSettings.newBuilder().build(), clientContext);
+  }
+
+  public static final GrpcAssetServiceStub create(
+      ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException {
+    return new GrpcAssetServiceStub(
+        AssetServiceStubSettings.newBuilder().build(), clientContext, callableFactory);
+  }
+
+  /**
+   * Constructs an instance of GrpcAssetServiceStub, using the given settings. This is protected so
+   * that it is easy to make a subclass, but otherwise, the static factory methods should be
+   * preferred.
+   */
+  protected GrpcAssetServiceStub(AssetServiceStubSettings settings, ClientContext clientContext)
+      throws IOException {
+    this(settings, clientContext, new GrpcAssetServiceCallableFactory());
+  }
+
+  /**
+   * Constructs an instance of GrpcAssetServiceStub, using the given settings. This is protected so
+   * that it is easy to make a subclass, but otherwise, the static factory methods should be
+   * preferred.
+   */
+  protected GrpcAssetServiceStub(
+      AssetServiceStubSettings settings,
+      ClientContext clientContext,
+      GrpcStubCallableFactory callableFactory)
+      throws IOException {
+    this.callableFactory = callableFactory;
+    this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory);
+
+    GrpcCallSettings<ExportAssetsRequest, Operation> exportAssetsTransportSettings =
+        GrpcCallSettings.<ExportAssetsRequest, Operation>newBuilder()
+            .setMethodDescriptor(exportAssetsMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<ExportAssetsRequest>() {
+                  @Override
+                  public Map<String, String> extract(ExportAssetsRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("parent", String.valueOf(request.getParent()));
+                    return params.build();
+                  }
+                })
+            .build();
+    GrpcCallSettings<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+        batchGetAssetsHistoryTransportSettings =
+            GrpcCallSettings
+                .<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>newBuilder()
+                .setMethodDescriptor(batchGetAssetsHistoryMethodDescriptor)
+                .setParamsExtractor(
+                    new RequestParamsExtractor<BatchGetAssetsHistoryRequest>() {
+                      @Override
+                      public Map<String, String> extract(BatchGetAssetsHistoryRequest request) {
+                        ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                        params.put("parent", String.valueOf(request.getParent()));
+                        return params.build();
+                      }
+                    })
+                .build();
+    GrpcCallSettings<CreateFeedRequest, Feed> createFeedTransportSettings =
+        GrpcCallSettings.<CreateFeedRequest, Feed>newBuilder()
+            .setMethodDescriptor(createFeedMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<CreateFeedRequest>() {
+                  @Override
+                  public Map<String, String> extract(CreateFeedRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("parent", String.valueOf(request.getParent()));
+                    return params.build();
+                  }
+                })
+            .build();
+    GrpcCallSettings<GetFeedRequest, Feed> getFeedTransportSettings =
+        GrpcCallSettings.<GetFeedRequest, Feed>newBuilder()
+            .setMethodDescriptor(getFeedMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<GetFeedRequest>() {
+                  @Override
+                  public Map<String, String> extract(GetFeedRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("name", String.valueOf(request.getName()));
+                    return params.build();
+                  }
+                })
+            .build();
+    GrpcCallSettings<ListFeedsRequest, ListFeedsResponse> listFeedsTransportSettings =
+        GrpcCallSettings.<ListFeedsRequest, ListFeedsResponse>newBuilder()
+            .setMethodDescriptor(listFeedsMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<ListFeedsRequest>() {
+                  @Override
+                  public Map<String, String> extract(ListFeedsRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("parent", String.valueOf(request.getParent()));
+                    return params.build();
+                  }
+                })
+            .build();
+    GrpcCallSettings<UpdateFeedRequest, Feed> updateFeedTransportSettings =
+        GrpcCallSettings.<UpdateFeedRequest, Feed>newBuilder()
+            .setMethodDescriptor(updateFeedMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<UpdateFeedRequest>() {
+                  @Override
+                  public Map<String, String> extract(UpdateFeedRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("feed.name", String.valueOf(request.getFeed().getName()));
+                    return params.build();
+                  }
+                })
+            .build();
+    GrpcCallSettings<DeleteFeedRequest, Empty> deleteFeedTransportSettings =
+        GrpcCallSettings.<DeleteFeedRequest, Empty>newBuilder()
+            .setMethodDescriptor(deleteFeedMethodDescriptor)
+            .setParamsExtractor(
+                new RequestParamsExtractor<DeleteFeedRequest>() {
+                  @Override
+                  public Map<String, String> extract(DeleteFeedRequest request) {
+                    ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
+                    params.put("name", String.valueOf(request.getName()));
+                    return params.build();
+                  }
+                })
+            .build();
+
+    this.exportAssetsCallable =
+        callableFactory.createUnaryCallable(
+            exportAssetsTransportSettings, settings.exportAssetsSettings(), clientContext);
+    this.exportAssetsOperationCallable =
+        callableFactory.createOperationCallable(
+            exportAssetsTransportSettings,
+            settings.exportAssetsOperationSettings(),
+            clientContext,
+            this.operationsStub);
+    this.batchGetAssetsHistoryCallable =
+        callableFactory.createUnaryCallable(
+            batchGetAssetsHistoryTransportSettings,
+            settings.batchGetAssetsHistorySettings(),
+            clientContext);
+    this.createFeedCallable =
+        callableFactory.createUnaryCallable(
+            createFeedTransportSettings, settings.createFeedSettings(), clientContext);
+    this.getFeedCallable =
+        callableFactory.createUnaryCallable(
+            getFeedTransportSettings, settings.getFeedSettings(), clientContext);
+    this.listFeedsCallable =
+        callableFactory.createUnaryCallable(
+            listFeedsTransportSettings, settings.listFeedsSettings(), clientContext);
+    this.updateFeedCallable =
+        callableFactory.createUnaryCallable(
+            updateFeedTransportSettings, settings.updateFeedSettings(), clientContext);
+    this.deleteFeedCallable =
+        callableFactory.createUnaryCallable(
+            deleteFeedTransportSettings, settings.deleteFeedSettings(), clientContext);
+
+    backgroundResources = new BackgroundResourceAggregation(clientContext.getBackgroundResources());
+  }
+
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public GrpcOperationsStub getOperationsStub() {
+    return operationsStub;
+  }
+
+  @BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+  public OperationCallable<ExportAssetsRequest, ExportAssetsResponse, ExportAssetsRequest>
+      exportAssetsOperationCallable() {
+    return exportAssetsOperationCallable;
+  }
+
+  public UnaryCallable<ExportAssetsRequest, Operation> exportAssetsCallable() {
+    return exportAssetsCallable;
+  }
+
+  public UnaryCallable<BatchGetAssetsHistoryRequest, BatchGetAssetsHistoryResponse>
+      batchGetAssetsHistoryCallable() {
+    return batchGetAssetsHistoryCallable;
+  }
+
+  public UnaryCallable<CreateFeedRequest, Feed> createFeedCallable() {
+    return createFeedCallable;
+  }
+
+  public UnaryCallable<GetFeedRequest, Feed> getFeedCallable() {
+    return getFeedCallable;
+  }
+
+  public UnaryCallable<ListFeedsRequest, ListFeedsResponse> listFeedsCallable() {
+    return listFeedsCallable;
+  }
+
+  public UnaryCallable<UpdateFeedRequest, Feed> updateFeedCallable() {
+    return updateFeedCallable;
+  }
+
+  public UnaryCallable<DeleteFeedRequest, Empty> deleteFeedCallable() {
+    return deleteFeedCallable;
+  }
+
+  @Override
+  public final void close() {
+    shutdown();
+  }
+
+  @Override
+  public void shutdown() {
+    backgroundResources.shutdown();
+  }
+
+  @Override
+  public boolean isShutdown() {
+    return backgroundResources.isShutdown();
+  }
+
+  @Override
+  public boolean isTerminated() {
+    return backgroundResources.isTerminated();
+  }
+
+  @Override
+  public void shutdownNow() {
+    backgroundResources.shutdownNow();
+  }
+
+  @Override
+  public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
+    return backgroundResources.awaitTermination(duration, unit);
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/AssetServiceClientTest.java b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/AssetServiceClientTest.java
new file mode 100644
index 000000000000..e09cec00af04
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/AssetServiceClientTest.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.gax.core.NoCredentialsProvider;
+import com.google.api.gax.grpc.GaxGrpcProperties;
+import com.google.api.gax.grpc.testing.LocalChannelProvider;
+import com.google.api.gax.grpc.testing.MockGrpcService;
+import com.google.api.gax.grpc.testing.MockServiceHelper;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.InvalidArgumentException;
+import com.google.protobuf.AbstractMessage;
+import com.google.protobuf.Empty;
+import io.grpc.Status;
+import io.grpc.StatusRuntimeException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+@javax.annotation.Generated("by GAPIC")
+public class AssetServiceClientTest {
+  private static MockAssetService mockAssetService;
+  private static MockServiceHelper serviceHelper;
+  private AssetServiceClient client;
+  private LocalChannelProvider channelProvider;
+
+  @BeforeClass
+  public static void startStaticServer() {
+    mockAssetService = new MockAssetService();
+    serviceHelper =
+        new MockServiceHelper("in-process-1", Arrays.<MockGrpcService>asList(mockAssetService));
+    serviceHelper.start();
+  }
+
+  @AfterClass
+  public static void stopServer() {
+    serviceHelper.stop();
+  }
+
+  @Before
+  public void setUp() throws IOException {
+    serviceHelper.reset();
+    channelProvider = serviceHelper.createChannelProvider();
+    AssetServiceSettings settings =
+        AssetServiceSettings.newBuilder()
+            .setTransportChannelProvider(channelProvider)
+            .setCredentialsProvider(NoCredentialsProvider.create())
+            .build();
+    client = AssetServiceClient.create(settings);
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    client.close();
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void batchGetAssetsHistoryTest() {
+    BatchGetAssetsHistoryResponse expectedResponse =
+        BatchGetAssetsHistoryResponse.newBuilder().build();
+    mockAssetService.addResponse(expectedResponse);
+
+    String parent = "parent-995424086";
+
+    BatchGetAssetsHistoryResponse actualResponse = client.batchGetAssetsHistory(parent);
+    Assert.assertEquals(expectedResponse, actualResponse);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    BatchGetAssetsHistoryRequest actualRequest =
+        (BatchGetAssetsHistoryRequest) actualRequests.get(0);
+
+    Assert.assertEquals(parent, actualRequest.getParent());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void batchGetAssetsHistoryExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      String parent = "parent-995424086";
+
+      client.batchGetAssetsHistory(parent);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void createFeedTest() {
+    String name = "name3373707";
+    Feed expectedResponse = Feed.newBuilder().setName(name).build();
+    mockAssetService.addResponse(expectedResponse);
+
+    String parent = "parent-995424086";
+
+    Feed actualResponse = client.createFeed(parent);
+    Assert.assertEquals(expectedResponse, actualResponse);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    CreateFeedRequest actualRequest = (CreateFeedRequest) actualRequests.get(0);
+
+    Assert.assertEquals(parent, actualRequest.getParent());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void createFeedExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      String parent = "parent-995424086";
+
+      client.createFeed(parent);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void getFeedTest() {
+    String name2 = "name2-1052831874";
+    Feed expectedResponse = Feed.newBuilder().setName(name2).build();
+    mockAssetService.addResponse(expectedResponse);
+
+    String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+
+    Feed actualResponse = client.getFeed(formattedName);
+    Assert.assertEquals(expectedResponse, actualResponse);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    GetFeedRequest actualRequest = (GetFeedRequest) actualRequests.get(0);
+
+    Assert.assertEquals(formattedName, actualRequest.getName());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void getFeedExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+
+      client.getFeed(formattedName);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void listFeedsTest() {
+    ListFeedsResponse expectedResponse = ListFeedsResponse.newBuilder().build();
+    mockAssetService.addResponse(expectedResponse);
+
+    String parent = "parent-995424086";
+
+    ListFeedsResponse actualResponse = client.listFeeds(parent);
+    Assert.assertEquals(expectedResponse, actualResponse);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    ListFeedsRequest actualRequest = (ListFeedsRequest) actualRequests.get(0);
+
+    Assert.assertEquals(parent, actualRequest.getParent());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void listFeedsExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      String parent = "parent-995424086";
+
+      client.listFeeds(parent);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void updateFeedTest() {
+    String name = "name3373707";
+    Feed expectedResponse = Feed.newBuilder().setName(name).build();
+    mockAssetService.addResponse(expectedResponse);
+
+    Feed feed = Feed.newBuilder().build();
+
+    Feed actualResponse = client.updateFeed(feed);
+    Assert.assertEquals(expectedResponse, actualResponse);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    UpdateFeedRequest actualRequest = (UpdateFeedRequest) actualRequests.get(0);
+
+    Assert.assertEquals(feed, actualRequest.getFeed());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void updateFeedExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      Feed feed = Feed.newBuilder().build();
+
+      client.updateFeed(feed);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void deleteFeedTest() {
+    Empty expectedResponse = Empty.newBuilder().build();
+    mockAssetService.addResponse(expectedResponse);
+
+    String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+
+    client.deleteFeed(formattedName);
+
+    List<AbstractMessage> actualRequests = mockAssetService.getRequests();
+    Assert.assertEquals(1, actualRequests.size());
+    DeleteFeedRequest actualRequest = (DeleteFeedRequest) actualRequests.get(0);
+
+    Assert.assertEquals(formattedName, actualRequest.getName());
+    Assert.assertTrue(
+        channelProvider.isHeaderSent(
+            ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+            GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+  }
+
+  @Test
+  @SuppressWarnings("all")
+  public void deleteFeedExceptionTest() throws Exception {
+    StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+    mockAssetService.addException(exception);
+
+    try {
+      String formattedName = AssetServiceClient.formatFeedName("[PROJECT]", "[FEED]");
+
+      client.deleteFeed(formattedName);
+      Assert.fail("No exception raised");
+    } catch (InvalidArgumentException e) {
+      // Expected exception
+    }
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetService.java b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetService.java
new file mode 100644
index 000000000000..05e6fc84c9d6
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetService.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.grpc.testing.MockGrpcService;
+import com.google.protobuf.AbstractMessage;
+import io.grpc.ServerServiceDefinition;
+import java.util.List;
+
+@javax.annotation.Generated("by GAPIC")
+@BetaApi
+public class MockAssetService implements MockGrpcService {
+  private final MockAssetServiceImpl serviceImpl;
+
+  public MockAssetService() {
+    serviceImpl = new MockAssetServiceImpl();
+  }
+
+  @Override
+  public List<AbstractMessage> getRequests() {
+    return serviceImpl.getRequests();
+  }
+
+  @Override
+  public void addResponse(AbstractMessage response) {
+    serviceImpl.addResponse(response);
+  }
+
+  @Override
+  public void addException(Exception exception) {
+    serviceImpl.addException(exception);
+  }
+
+  @Override
+  public ServerServiceDefinition getServiceDefinition() {
+    return serviceImpl.bindService();
+  }
+
+  @Override
+  public void reset() {
+    serviceImpl.reset();
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetServiceImpl.java b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetServiceImpl.java
new file mode 100644
index 000000000000..630826258ad5
--- /dev/null
+++ b/google-cloud-clients/google-cloud-asset/src/test/java/com/google/cloud/asset/v1p2beta1/MockAssetServiceImpl.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.cloud.asset.v1p2beta1;
+
+import com.google.api.core.BetaApi;
+import com.google.cloud.asset.v1p2beta1.AssetServiceGrpc.AssetServiceImplBase;
+import com.google.longrunning.Operation;
+import com.google.protobuf.AbstractMessage;
+import com.google.protobuf.Empty;
+import io.grpc.stub.StreamObserver;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+@javax.annotation.Generated("by GAPIC")
+@BetaApi
+public class MockAssetServiceImpl extends AssetServiceImplBase {
+  private List<AbstractMessage> requests;
+  private Queue<Object> responses;
+
+  public MockAssetServiceImpl() {
+    requests = new ArrayList<>();
+    responses = new LinkedList<>();
+  }
+
+  public List<AbstractMessage> getRequests() {
+    return requests;
+  }
+
+  public void addResponse(AbstractMessage response) {
+    responses.add(response);
+  }
+
+  public void setResponses(List<AbstractMessage> responses) {
+    this.responses = new LinkedList<Object>(responses);
+  }
+
+  public void addException(Exception exception) {
+    responses.add(exception);
+  }
+
+  public void reset() {
+    requests = new ArrayList<>();
+    responses = new LinkedList<>();
+  }
+
+  @Override
+  public void exportAssets(
+      ExportAssetsRequest request, StreamObserver<Operation> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof Operation) {
+      requests.add(request);
+      responseObserver.onNext((Operation) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void batchGetAssetsHistory(
+      BatchGetAssetsHistoryRequest request,
+      StreamObserver<BatchGetAssetsHistoryResponse> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof BatchGetAssetsHistoryResponse) {
+      requests.add(request);
+      responseObserver.onNext((BatchGetAssetsHistoryResponse) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void createFeed(CreateFeedRequest request, StreamObserver<Feed> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof Feed) {
+      requests.add(request);
+      responseObserver.onNext((Feed) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void getFeed(GetFeedRequest request, StreamObserver<Feed> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof Feed) {
+      requests.add(request);
+      responseObserver.onNext((Feed) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void listFeeds(
+      ListFeedsRequest request, StreamObserver<ListFeedsResponse> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof ListFeedsResponse) {
+      requests.add(request);
+      responseObserver.onNext((ListFeedsResponse) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void updateFeed(UpdateFeedRequest request, StreamObserver<Feed> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof Feed) {
+      requests.add(request);
+      responseObserver.onNext((Feed) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+
+  @Override
+  public void deleteFeed(DeleteFeedRequest request, StreamObserver<Empty> responseObserver) {
+    Object response = responses.remove();
+    if (response instanceof Empty) {
+      requests.add(request);
+      responseObserver.onNext((Empty) response);
+      responseObserver.onCompleted();
+    } else if (response instanceof Exception) {
+      responseObserver.onError((Exception) response);
+    } else {
+      responseObserver.onError(new IllegalArgumentException("Unrecognized response type"));
+    }
+  }
+}
diff --git a/google-cloud-clients/google-cloud-asset/synth.metadata b/google-cloud-clients/google-cloud-asset/synth.metadata
index 4cf3d30d44f6..aa7e32848446 100644
--- a/google-cloud-clients/google-cloud-asset/synth.metadata
+++ b/google-cloud-clients/google-cloud-asset/synth.metadata
@@ -1,19 +1,19 @@
 {
-  "updateTime": "2019-08-02T07:33:08.582600Z",
+  "updateTime": "2019-08-06T21:10:56.177392Z",
   "sources": [
     {
       "generator": {
         "name": "artman",
-        "version": "0.32.0",
-        "dockerImage": "googleapis/artman@sha256:6929f343c400122d85818195b18613330a12a014bffc1e08499550d40571479d"
+        "version": "0.32.1",
+        "dockerImage": "googleapis/artman@sha256:a684d40ba9a4e15946f5f2ca6b4bd9fe301192f522e9de4fff622118775f309b"
       }
     },
     {
       "git": {
         "name": "googleapis",
         "remote": "https://github.com/googleapis/googleapis.git",
-        "sha": "1b1ef1ca146c2119f077bca5e2b638c6bacb0925",
-        "internalRef": "261214002"
+        "sha": "ac06010e785940cd9dc6800faa2985a76ba04d3a",
+        "internalRef": "261988354"
       }
     }
   ],
@@ -37,6 +37,16 @@
         "generator": "gapic",
         "config": "google/cloud/asset/artman_cloudasset_v1beta1.yaml"
       }
+    },
+    {
+      "client": {
+        "source": "googleapis",
+        "apiName": "asset",
+        "apiVersion": "v1p2beta1",
+        "language": "java",
+        "generator": "gapic",
+        "config": "google/cloud/asset/artman_cloudasset_v1p2beta1.yaml"
+      }
     }
   ]
 }
\ No newline at end of file
diff --git a/google-cloud-clients/google-cloud-asset/synth.py b/google-cloud-clients/google-cloud-asset/synth.py
index 85752b341082..4f015a2eb14f 100644
--- a/google-cloud-clients/google-cloud-asset/synth.py
+++ b/google-cloud-clients/google-cloud-asset/synth.py
@@ -21,7 +21,7 @@
 gapic = gcp.GAPICGenerator()
 
 service = 'asset'
-versions = ['v1', 'v1beta1']
+versions = ['v1', 'v1beta1', 'v1p2beta1']
 config_pattern = '/google/cloud/asset/artman_cloudasset_{version}.yaml'
 
 for version in versions:

From df5abefbefc36b8fc12eb46a8d0759c0df806ad2 Mon Sep 17 00:00:00 2001
From: Jeff Ching <chingor@google.com>
Date: Tue, 6 Aug 2019 14:23:41 -0700
Subject: [PATCH 2/3] Add pom.xml files and versions.txt configs

---
 .../grpc-google-cloud-asset-v1p2beta1/pom.xml | 52 +++++++++++++++++++
 google-api-grpc/pom.xml                       |  2 +
 .../pom.xml                                   | 36 +++++++++++++
 versions.txt                                  |  2 +
 4 files changed, 92 insertions(+)
 create mode 100644 google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
 create mode 100644 google-api-grpc/proto-google-cloud-asset-v1p2beta1/pom.xml

diff --git a/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
new file mode 100644
index 000000000000..64bc1ac8e2de
--- /dev/null
+++ b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
@@ -0,0 +1,52 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>grpc-google-cloud-asset-v1p2beta1</artifactId>
+  <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1beta1:current} -->
+  <name>grpc-google-cloud-asset-v1p2beta1</name>
+  <description>GRPC library for grpc-google-cloud-asset-v1beta1</description>
+  <parent>
+    <groupId>com.google.api.grpc</groupId>
+    <artifactId>google-api-grpc</artifactId>
+    <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:google-api-grpc:current} -->
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-stub</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-protobuf</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>proto-google-cloud-asset-v1beta1</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>3.1.1</version>
+        <configuration>
+          <show>protected</show>
+          <nohelp>true</nohelp>
+          <doclint>none</doclint>
+          <splitindex>true</splitindex>
+          <offlineLinks>
+            <offlineLink>
+              <url>${project.javadoc.protobufBaseURL}</url>
+              <location>../../../../proto-google-cloud-asset-v1beta1/target/site/apidocs/</location>
+            </offlineLink>
+          </offlineLinks>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
diff --git a/google-api-grpc/pom.xml b/google-api-grpc/pom.xml
index bdff3c0318f6..9cbf3bc3fea4 100644
--- a/google-api-grpc/pom.xml
+++ b/google-api-grpc/pom.xml
@@ -831,6 +831,7 @@
   <modules>
     <module>grpc-google-cloud-asset-v1</module>
     <module>grpc-google-cloud-asset-v1beta1</module>
+    <module>grpc-google-cloud-asset-v1p2beta1</module>
     <module>grpc-google-cloud-automl-v1beta1</module>
     <module>grpc-google-cloud-bigquerydatatransfer-v1</module>
     <module>grpc-google-cloud-bigquerystorage-v1beta1</module>
@@ -900,6 +901,7 @@
 
     <module>proto-google-cloud-asset-v1</module>
     <module>proto-google-cloud-asset-v1beta1</module>
+    <module>proto-google-cloud-asset-v1p2beta1</module>
     <module>proto-google-cloud-automl-v1beta1</module>
     <module>proto-google-cloud-bigquerydatatransfer-v1</module>
     <module>proto-google-cloud-bigquerystorage-v1beta1</module>
diff --git a/google-api-grpc/proto-google-cloud-asset-v1p2beta1/pom.xml b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/pom.xml
new file mode 100644
index 000000000000..a4c5b428c262
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-asset-v1p2beta1/pom.xml
@@ -0,0 +1,36 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>proto-google-cloud-asset-v1p2beta1</artifactId>
+  <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-asset-v1beta1:current} -->
+  <name>proto-google-cloud-asset-v1beta1</name>
+  <description>PROTO library for proto-google-cloud-asset-v1p2beta1</description>
+  <parent>
+    <groupId>com.google.api.grpc</groupId>
+    <artifactId>google-api-grpc</artifactId>
+    <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:google-api-grpc:current} -->
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.api</groupId>
+      <artifactId>api-common</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>proto-google-common-protos</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>proto-google-iam-v1</artifactId>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/versions.txt b/versions.txt
index 4f78dd7b17b4..2ef9500a0d0f 100644
--- a/versions.txt
+++ b/versions.txt
@@ -73,6 +73,7 @@ google-cloud-websecurityscanner:0.103.0:0.103.1-SNAPSHOT
 grafeas:0.6.0:0.6.1-SNAPSHOT
 grpc-google-cloud-asset-v1:0.68.0:0.68.1-SNAPSHOT
 grpc-google-cloud-asset-v1beta1:0.68.0:0.68.1-SNAPSHOT
+grpc-google-cloud-asset-v1p2beta1:0.68.0:0.68.1-SNAPSHOT
 grpc-google-cloud-automl-v1beta1:0.68.0:0.68.1-SNAPSHOT
 grpc-google-cloud-bigquerydatatransfer-v1:0.68.0:0.68.1-SNAPSHOT
 grpc-google-cloud-bigquerystorage-v1beta1:0.68.0:0.68.1-SNAPSHOT
@@ -141,6 +142,7 @@ grpc-google-cloud-websecurityscanner-v1alpha:0.68.0:0.68.1-SNAPSHOT
 grpc-google-cloud-websecurityscanner-v1beta:0.68.0:0.68.1-SNAPSHOT
 proto-google-cloud-asset-v1:0.68.0:0.68.1-SNAPSHOT
 proto-google-cloud-asset-v1beta1:0.68.0:0.68.1-SNAPSHOT
+proto-google-cloud-asset-v1p2beta1:0.68.0:0.68.1-SNAPSHOT
 proto-google-cloud-automl-v1beta1:0.68.0:0.68.1-SNAPSHOT
 proto-google-cloud-bigquerydatatransfer-v1:0.68.0:0.68.1-SNAPSHOT
 proto-google-cloud-bigquerystorage-v1beta1:0.68.0:0.68.1-SNAPSHOT

From c95c7efe3e7aa07e956183081698dff655edf140 Mon Sep 17 00:00:00 2001
From: Jeff Ching <chingor@google.com>
Date: Tue, 6 Aug 2019 15:18:15 -0700
Subject: [PATCH 3/3] Fix versions in pom files

---
 .../grpc-google-cloud-asset-v1p2beta1/pom.xml   |  8 ++++----
 google-api-grpc/pom.xml                         | 10 ++++++++++
 google-cloud-bom/pom.xml                        | 10 ++++++++++
 google-cloud-clients/google-cloud-asset/pom.xml | 17 +++++++++++++++++
 4 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
index 64bc1ac8e2de..dd51f8f33ba9 100644
--- a/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
+++ b/google-api-grpc/grpc-google-cloud-asset-v1p2beta1/pom.xml
@@ -3,9 +3,9 @@
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>grpc-google-cloud-asset-v1p2beta1</artifactId>
-  <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1beta1:current} -->
+  <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1p2beta1:current} -->
   <name>grpc-google-cloud-asset-v1p2beta1</name>
-  <description>GRPC library for grpc-google-cloud-asset-v1beta1</description>
+  <description>GRPC library for grpc-google-cloud-asset-v1p2beta1</description>
   <parent>
     <groupId>com.google.api.grpc</groupId>
     <artifactId>google-api-grpc</artifactId>
@@ -24,7 +24,7 @@
     </dependency>
     <dependency>
       <groupId>com.google.api.grpc</groupId>
-      <artifactId>proto-google-cloud-asset-v1beta1</artifactId>
+      <artifactId>proto-google-cloud-asset-v1p2beta1</artifactId>
       <scope>compile</scope>
     </dependency>
   </dependencies>
@@ -42,7 +42,7 @@
           <offlineLinks>
             <offlineLink>
               <url>${project.javadoc.protobufBaseURL}</url>
-              <location>../../../../proto-google-cloud-asset-v1beta1/target/site/apidocs/</location>
+              <location>../../../../proto-google-cloud-asset-v1p2beta1/target/site/apidocs/</location>
             </offlineLink>
           </offlineLinks>
         </configuration>
diff --git a/google-api-grpc/pom.xml b/google-api-grpc/pom.xml
index 9cbf3bc3fea4..08a4ecccf772 100644
--- a/google-api-grpc/pom.xml
+++ b/google-api-grpc/pom.xml
@@ -160,6 +160,16 @@
         <artifactId>grpc-google-cloud-asset-v1beta1</artifactId>
         <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1beta1:current} -->
       </dependency>
+      <dependency>
+        <groupId>com.google.api.grpc</groupId>
+        <artifactId>proto-google-cloud-asset-v1p2beta1</artifactId>
+        <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-asset-v1p2beta1:current} -->
+      </dependency>
+      <dependency>
+        <groupId>com.google.api.grpc</groupId>
+        <artifactId>grpc-google-cloud-asset-v1p2beta1</artifactId>
+        <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1p2beta1:current} -->
+      </dependency>
       <dependency>
         <groupId>com.google.api.grpc</groupId>
         <artifactId>proto-google-cloud-automl-v1beta1</artifactId>
diff --git a/google-cloud-bom/pom.xml b/google-cloud-bom/pom.xml
index 18829785eaec..257d44f25c6a 100644
--- a/google-cloud-bom/pom.xml
+++ b/google-cloud-bom/pom.xml
@@ -219,6 +219,16 @@
         <artifactId>grpc-google-cloud-asset-v1beta1</artifactId>
         <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1beta1:current} -->
       </dependency>
+      <dependency>
+        <groupId>com.google.api.grpc</groupId>
+        <artifactId>proto-google-cloud-asset-v1p2beta1</artifactId>
+        <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-asset-v1p2beta1:current} -->
+      </dependency>
+      <dependency>
+        <groupId>com.google.api.grpc</groupId>
+        <artifactId>grpc-google-cloud-asset-v1p2beta1</artifactId>
+        <version>0.68.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-asset-v1p2beta1:current} -->
+      </dependency>
       <dependency>
         <groupId>com.google.cloud</groupId>
         <artifactId>google-cloud-automl</artifactId>
diff --git a/google-cloud-clients/google-cloud-asset/pom.xml b/google-cloud-clients/google-cloud-asset/pom.xml
index c92a6d06314f..bc8dbf880e11 100644
--- a/google-cloud-clients/google-cloud-asset/pom.xml
+++ b/google-cloud-clients/google-cloud-asset/pom.xml
@@ -30,6 +30,10 @@
       <groupId>com.google.api.grpc</groupId>
       <artifactId>proto-google-cloud-asset-v1beta1</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>proto-google-cloud-asset-v1p2beta1</artifactId>
+    </dependency>
     <!-- Test dependencies -->
     <dependency>
       <groupId>junit</groupId>
@@ -46,6 +50,11 @@
       <artifactId>grpc-google-cloud-asset-v1beta1</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>grpc-google-cloud-asset-v1p2beta1</artifactId>
+      <scope>test</scope>
+    </dependency>
     <!-- Need testing utility classes for generated gRPC clients tests -->
     <dependency>
       <groupId>com.google.api</groupId>
@@ -83,6 +92,14 @@
               <url>${project.javadoc.protobufBaseURL}</url>
               <location>../../../../../google-api-grpc/grpc-google-cloud-asset-v1beta1/target/site/apidocs/</location>
             </offlineLink>
+            <offlineLink>
+              <url>${project.javadoc.protobufBaseURL}</url>
+              <location>../../../../../google-api-grpc/proto-google-cloud-asset-v1p2beta1/target/site/apidocs/</location>
+            </offlineLink>
+            <offlineLink>
+              <url>${project.javadoc.protobufBaseURL}</url>
+              <location>../../../../../google-api-grpc/grpc-google-cloud-asset-v1p2beta1/target/site/apidocs/</location>
+            </offlineLink>
           </offlineLinks>
         </configuration>
       </plugin>
