Repository: googleapis/java-storage
Pull request #1218 (2022-01-26 20:48:49)

feat: Change RewriteObjectRequest to specify bucket name, object name and KMS key outside of Object resource
- [ ] Regenerate this pull request now.

PiperOrigin-RevId: 424391425

Source-Link: https://github.com/googleapis/googleapis/commit/8479561453671f4dbfaa61514f23de5fdfd7f737

Source-Link: https://github.com/googleapis/googleapis-gen/commit/bc45618aba526abd29f67a6b7476192daff11408
Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYmM0NTYxOGFiYTUyNmFiZDI5ZjY3YTZiNzQ3NjE5MmRhZmYxMTQwOCJ9


Patch:
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index dcdda8c6..be3b9bde 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,16 @@
+# Copyright 2022 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.
 docker:
   image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
-  digest: sha256:9669c169d0582f13d6b2d319a43a78fc49f296a883aa48519bd0e5c7d34087c4
+  digest: sha256:7062473f423f339256346ddbee3d81fb1de6b784fabc2a4d959d7df2c720e375
diff --git a/.github/workflows/approve-readme.yaml b/.github/workflows/approve-readme.yaml
index 7513acae..c5132427 100644
--- a/.github/workflows/approve-readme.yaml
+++ b/.github/workflows/approve-readme.yaml
@@ -6,7 +6,7 @@ jobs:
     runs-on: ubuntu-latest
     if: github.repository_owner == 'googleapis' && github.head_ref == 'autosynth-readme'
     steps:
-      - uses: actions/github-script@v3
+      - uses: actions/github-script@v5
         with:
           github-token: ${{secrets.YOSHI_APPROVER_TOKEN}}
           script: |
diff --git a/.github/workflows/auto-release.yaml b/.github/workflows/auto-release.yaml
index 9b4fd4d8..59c7cadd 100644
--- a/.github/workflows/auto-release.yaml
+++ b/.github/workflows/auto-release.yaml
@@ -6,7 +6,7 @@ jobs:
     runs-on: ubuntu-latest
     if: contains(github.head_ref, 'release-please')
     steps:
-    - uses: actions/github-script@v3
+    - uses: actions/github-script@v5
       with:
         github-token: ${{secrets.YOSHI_APPROVER_TOKEN}}
         debug: true
diff --git a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageClient.java b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageClient.java
index 96f02867..7965a7b2 100644
--- a/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageClient.java
+++ b/gapic-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageClient.java
@@ -375,9 +375,9 @@ public class StorageClient implements BackgroundResource {
    * @param parent Required. The project to which this bucket will belong.
    * @param bucket Required. Properties of the new bucket being inserted. The project and name of
    *     the bucket are specified in this request, not in the bucket resource.
-   * @param bucketId The ID to use for this bucket, which will become the final component of the
-   *     bucket's resource name. For example, the value `foo` might result in a bucket with the name
-   *     `projects/123456/buckets/foo`.
+   * @param bucketId Required. The ID to use for this bucket, which will become the final component
+   *     of the bucket's resource name. For example, the value `foo` might result in a bucket with
+   *     the name `projects/123456/buckets/foo`.
    * @throws com.google.api.gax.rpc.ApiException if the remote call fails
    */
   public final Bucket createBucket(ProjectName parent, Bucket bucket, String bucketId) {
@@ -408,9 +408,9 @@ public class StorageClient implements BackgroundResource {
    * @param parent Required. The project to which this bucket will belong.
    * @param bucket Required. Properties of the new bucket being inserted. The project and name of
    *     the bucket are specified in this request, not in the bucket resource.
-   * @param bucketId The ID to use for this bucket, which will become the final component of the
-   *     bucket's resource name. For example, the value `foo` might result in a bucket with the name
-   *     `projects/123456/buckets/foo`.
+   * @param bucketId Required. The ID to use for this bucket, which will become the final component
+   *     of the bucket's resource name. For example, the value `foo` might result in a bucket with
+   *     the name `projects/123456/buckets/foo`.
    * @throws com.google.api.gax.rpc.ApiException if the remote call fails
    */
   public final Bucket createBucket(String parent, Bucket bucket, String bucketId) {
@@ -2228,8 +2228,10 @@ public class StorageClient implements BackgroundResource {
    * try (StorageClient storageClient = StorageClient.create()) {
    *   RewriteObjectRequest request =
    *       RewriteObjectRequest.newBuilder()
+   *           .setDestinationName("destinationName-1762755655")
+   *           .setDestinationBucket(BucketName.of("[PROJECT]", "[BUCKET]").toString())
+   *           .setDestinationCustomerEncryption(CustomerEncryption.newBuilder().build())
    *           .setDestination(Object.newBuilder().build())
-   *           .setRewriteMask(FieldMask.newBuilder().build())
    *           .setSourceBucket("sourceBucket841604581")
    *           .setSourceObject("sourceObject1196439354")
    *           .setSourceGeneration(1232209852)
@@ -2271,8 +2273,10 @@ public class StorageClient implements BackgroundResource {
    * try (StorageClient storageClient = StorageClient.create()) {
    *   RewriteObjectRequest request =
    *       RewriteObjectRequest.newBuilder()
+   *           .setDestinationName("destinationName-1762755655")
+   *           .setDestinationBucket(BucketName.of("[PROJECT]", "[BUCKET]").toString())
+   *           .setDestinationCustomerEncryption(CustomerEncryption.newBuilder().build())
    *           .setDestination(Object.newBuilder().build())
-   *           .setRewriteMask(FieldMask.newBuilder().build())
    *           .setSourceBucket("sourceBucket841604581")
    *           .setSourceObject("sourceObject1196439354")
    *           .setSourceGeneration(1232209852)
diff --git a/pom.xml b/pom.xml
index 53fbe4c3..7344d95d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
-        <version>4.3.0</version>
+        <version>4.3.1</version>
         <scope>test</scope>
         <exclusions>
           <exclusion>
diff --git a/proto-google-cloud-storage-v2/clirr-ignored-differences.xml b/proto-google-cloud-storage-v2/clirr-ignored-differences.xml
index 6be59591..8d323bb1 100644
--- a/proto-google-cloud-storage-v2/clirr-ignored-differences.xml
+++ b/proto-google-cloud-storage-v2/clirr-ignored-differences.xml
@@ -29,4 +29,30 @@
     <method>* *ZoneAffinity*(*)</method>
   </difference>
 
+
+  <!--
+    Customer Encryption has been pulled up out of Object to a top level message,
+    then the respective request messages include as necessary.
+    -->
+  <!-- Allow new class as a parameter type -->
+  <difference>
+    <differenceType>7005</differenceType>
+    <className>com/google/storage/v2/Object*</className>
+    <method>* *CustomerEncryption*(*)</method>
+    <to>*</to>
+  </difference>
+  <!-- Allow new class as a return type -->
+  <difference>
+    <differenceType>7006</differenceType>
+    <className>com/google/storage/v2/Object*</className>
+    <method>* *CustomerEncryption*(*)</method>
+    <to>*</to>
+  </difference>
+  <!-- Allow deletion of old inner class -->
+  <difference>
+    <differenceType>8001</differenceType>
+    <className>com/google/storage/v2/Object$CustomerEncryption*</className>
+  </difference>
+
+
 </differences>
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
index eab8a872..31fa725c 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Bucket.java
@@ -5752,8 +5752,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
          *
          *
          * <pre>
-         * Type of the action. Currently, only `Delete` and
-         * `SetStorageClass` are supported.
+         * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+         * `AbortIncompleteMultipartUpload` are supported.
          * </pre>
          *
          * <code>string type = 1;</code>
@@ -5765,8 +5765,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
          *
          *
          * <pre>
-         * Type of the action. Currently, only `Delete` and
-         * `SetStorageClass` are supported.
+         * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+         * `AbortIncompleteMultipartUpload` are supported.
          * </pre>
          *
          * <code>string type = 1;</code>
@@ -5910,8 +5910,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
          *
          *
          * <pre>
-         * Type of the action. Currently, only `Delete` and
-         * `SetStorageClass` are supported.
+         * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+         * `AbortIncompleteMultipartUpload` are supported.
          * </pre>
          *
          * <code>string type = 1;</code>
@@ -5934,8 +5934,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
          *
          *
          * <pre>
-         * Type of the action. Currently, only `Delete` and
-         * `SetStorageClass` are supported.
+         * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+         * `AbortIncompleteMultipartUpload` are supported.
          * </pre>
          *
          * <code>string type = 1;</code>
@@ -6352,8 +6352,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
            *
            *
            * <pre>
-           * Type of the action. Currently, only `Delete` and
-           * `SetStorageClass` are supported.
+           * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+           * `AbortIncompleteMultipartUpload` are supported.
            * </pre>
            *
            * <code>string type = 1;</code>
@@ -6375,8 +6375,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
            *
            *
            * <pre>
-           * Type of the action. Currently, only `Delete` and
-           * `SetStorageClass` are supported.
+           * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+           * `AbortIncompleteMultipartUpload` are supported.
            * </pre>
            *
            * <code>string type = 1;</code>
@@ -6398,8 +6398,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
            *
            *
            * <pre>
-           * Type of the action. Currently, only `Delete` and
-           * `SetStorageClass` are supported.
+           * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+           * `AbortIncompleteMultipartUpload` are supported.
            * </pre>
            *
            * <code>string type = 1;</code>
@@ -6420,8 +6420,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
            *
            *
            * <pre>
-           * Type of the action. Currently, only `Delete` and
-           * `SetStorageClass` are supported.
+           * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+           * `AbortIncompleteMultipartUpload` are supported.
            * </pre>
            *
            * <code>string type = 1;</code>
@@ -6438,8 +6438,8 @@ public final class Bucket extends com.google.protobuf.GeneratedMessageV3
            *
            *
            * <pre>
-           * Type of the action. Currently, only `Delete` and
-           * `SetStorageClass` are supported.
+           * Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+           * `AbortIncompleteMultipartUpload` are supported.
            * </pre>
            *
            * <code>string type = 1;</code>
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
index a7222aae..9caf59fa 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ComposeObjectRequest.java
@@ -206,11 +206,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * The source object's name. All source objects must reside in the same
+     * Required. The source object's name. All source objects must reside in the same
      * bucket.
      * </pre>
      *
-     * <code>string name = 1;</code>
+     * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The name.
      */
@@ -219,11 +219,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * The source object's name. All source objects must reside in the same
+     * Required. The source object's name. All source objects must reside in the same
      * bucket.
      * </pre>
      *
-     * <code>string name = 1;</code>
+     * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The bytes for name.
      */
@@ -1065,11 +1065,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * The source object's name. All source objects must reside in the same
+     * Required. The source object's name. All source objects must reside in the same
      * bucket.
      * </pre>
      *
-     * <code>string name = 1;</code>
+     * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The name.
      */
@@ -1089,11 +1089,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * The source object's name. All source objects must reside in the same
+     * Required. The source object's name. All source objects must reside in the same
      * bucket.
      * </pre>
      *
-     * <code>string name = 1;</code>
+     * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The bytes for name.
      */
@@ -1558,11 +1558,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
        *
        *
        * <pre>
-       * The source object's name. All source objects must reside in the same
+       * Required. The source object's name. All source objects must reside in the same
        * bucket.
        * </pre>
        *
-       * <code>string name = 1;</code>
+       * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
        *
        * @return The name.
        */
@@ -1581,11 +1581,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
        *
        *
        * <pre>
-       * The source object's name. All source objects must reside in the same
+       * Required. The source object's name. All source objects must reside in the same
        * bucket.
        * </pre>
        *
-       * <code>string name = 1;</code>
+       * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
        *
        * @return The bytes for name.
        */
@@ -1604,11 +1604,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
        *
        *
        * <pre>
-       * The source object's name. All source objects must reside in the same
+       * Required. The source object's name. All source objects must reside in the same
        * bucket.
        * </pre>
        *
-       * <code>string name = 1;</code>
+       * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
        *
        * @param value The name to set.
        * @return This builder for chaining.
@@ -1626,11 +1626,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
        *
        *
        * <pre>
-       * The source object's name. All source objects must reside in the same
+       * Required. The source object's name. All source objects must reside in the same
        * bucket.
        * </pre>
        *
-       * <code>string name = 1;</code>
+       * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
        *
        * @return This builder for chaining.
        */
@@ -1644,11 +1644,11 @@ public final class ComposeObjectRequest extends com.google.protobuf.GeneratedMes
        *
        *
        * <pre>
-       * The source object's name. All source objects must reside in the same
+       * Required. The source object's name. All source objects must reside in the same
        * bucket.
        * </pre>
        *
-       * <code>string name = 1;</code>
+       * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
        *
        * @param value The bytes for name to set.
        * @return This builder for chaining.
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
index cf7c26c9..86f986b4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequest.java
@@ -260,12 +260,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
    *
    *
    * <pre>
-   * The ID to use for this bucket, which will become the final component of
+   * Required. The ID to use for this bucket, which will become the final component of
    * the bucket's resource name. For example, the value `foo` might result in
    * a bucket with the name `projects/123456/buckets/foo`.
    * </pre>
    *
-   * <code>string bucket_id = 3;</code>
+   * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
    *
    * @return The bucketId.
    */
@@ -285,12 +285,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
    *
    *
    * <pre>
-   * The ID to use for this bucket, which will become the final component of
+   * Required. The ID to use for this bucket, which will become the final component of
    * the bucket's resource name. For example, the value `foo` might result in
    * a bucket with the name `projects/123456/buckets/foo`.
    * </pre>
    *
-   * <code>string bucket_id = 3;</code>
+   * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
    *
    * @return The bytes for bucketId.
    */
@@ -1095,12 +1095,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
      *
      *
      * <pre>
-     * The ID to use for this bucket, which will become the final component of
+     * Required. The ID to use for this bucket, which will become the final component of
      * the bucket's resource name. For example, the value `foo` might result in
      * a bucket with the name `projects/123456/buckets/foo`.
      * </pre>
      *
-     * <code>string bucket_id = 3;</code>
+     * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The bucketId.
      */
@@ -1119,12 +1119,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
      *
      *
      * <pre>
-     * The ID to use for this bucket, which will become the final component of
+     * Required. The ID to use for this bucket, which will become the final component of
      * the bucket's resource name. For example, the value `foo` might result in
      * a bucket with the name `projects/123456/buckets/foo`.
      * </pre>
      *
-     * <code>string bucket_id = 3;</code>
+     * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return The bytes for bucketId.
      */
@@ -1143,12 +1143,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
      *
      *
      * <pre>
-     * The ID to use for this bucket, which will become the final component of
+     * Required. The ID to use for this bucket, which will become the final component of
      * the bucket's resource name. For example, the value `foo` might result in
      * a bucket with the name `projects/123456/buckets/foo`.
      * </pre>
      *
-     * <code>string bucket_id = 3;</code>
+     * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @param value The bucketId to set.
      * @return This builder for chaining.
@@ -1166,12 +1166,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
      *
      *
      * <pre>
-     * The ID to use for this bucket, which will become the final component of
+     * Required. The ID to use for this bucket, which will become the final component of
      * the bucket's resource name. For example, the value `foo` might result in
      * a bucket with the name `projects/123456/buckets/foo`.
      * </pre>
      *
-     * <code>string bucket_id = 3;</code>
+     * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @return This builder for chaining.
      */
@@ -1185,12 +1185,12 @@ public final class CreateBucketRequest extends com.google.protobuf.GeneratedMess
      *
      *
      * <pre>
-     * The ID to use for this bucket, which will become the final component of
+     * Required. The ID to use for this bucket, which will become the final component of
      * the bucket's resource name. For example, the value `foo` might result in
      * a bucket with the name `projects/123456/buckets/foo`.
      * </pre>
      *
-     * <code>string bucket_id = 3;</code>
+     * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
      *
      * @param value The bytes for bucketId to set.
      * @return This builder for chaining.
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
index e07c00e2..6dadebd0 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CreateBucketRequestOrBuilder.java
@@ -97,12 +97,12 @@ public interface CreateBucketRequestOrBuilder
    *
    *
    * <pre>
-   * The ID to use for this bucket, which will become the final component of
+   * Required. The ID to use for this bucket, which will become the final component of
    * the bucket's resource name. For example, the value `foo` might result in
    * a bucket with the name `projects/123456/buckets/foo`.
    * </pre>
    *
-   * <code>string bucket_id = 3;</code>
+   * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
    *
    * @return The bucketId.
    */
@@ -111,12 +111,12 @@ public interface CreateBucketRequestOrBuilder
    *
    *
    * <pre>
-   * The ID to use for this bucket, which will become the final component of
+   * Required. The ID to use for this bucket, which will become the final component of
    * the bucket's resource name. For example, the value `foo` might result in
    * a bucket with the name `projects/123456/buckets/foo`.
    * </pre>
    *
-   * <code>string bucket_id = 3;</code>
+   * <code>string bucket_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
    *
    * @return The bytes for bucketId.
    */
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java
new file mode 100644
index 00000000..72bc8591
--- /dev/null
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryption.java
@@ -0,0 +1,733 @@
+/*
+ * Copyright 2020 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.
+ */
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/storage/v2/storage.proto
+
+package com.google.storage.v2;
+
+/**
+ *
+ *
+ * <pre>
+ * Describes the customer-specified mechanism used to store an Object's data at
+ * rest.
+ * </pre>
+ *
+ * Protobuf type {@code google.storage.v2.CustomerEncryption}
+ */
+public final class CustomerEncryption extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.storage.v2.CustomerEncryption)
+    CustomerEncryptionOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use CustomerEncryption.newBuilder() to construct.
+  private CustomerEncryption(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private CustomerEncryption() {
+    encryptionAlgorithm_ = "";
+    keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+    return new CustomerEncryption();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private CustomerEncryption(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    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();
+
+              encryptionAlgorithm_ = s;
+              break;
+            }
+          case 26:
+            {
+              keySha256Bytes_ = input.readBytes();
+              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.storage.v2.StorageProto
+        .internal_static_google_storage_v2_CustomerEncryption_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.storage.v2.StorageProto
+        .internal_static_google_storage_v2_CustomerEncryption_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.storage.v2.CustomerEncryption.class,
+            com.google.storage.v2.CustomerEncryption.Builder.class);
+  }
+
+  public static final int ENCRYPTION_ALGORITHM_FIELD_NUMBER = 1;
+  private volatile java.lang.Object encryptionAlgorithm_;
+  /**
+   *
+   *
+   * <pre>
+   * The encryption algorithm.
+   * </pre>
+   *
+   * <code>string encryption_algorithm = 1;</code>
+   *
+   * @return The encryptionAlgorithm.
+   */
+  @java.lang.Override
+  public java.lang.String getEncryptionAlgorithm() {
+    java.lang.Object ref = encryptionAlgorithm_;
+    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();
+      encryptionAlgorithm_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The encryption algorithm.
+   * </pre>
+   *
+   * <code>string encryption_algorithm = 1;</code>
+   *
+   * @return The bytes for encryptionAlgorithm.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getEncryptionAlgorithmBytes() {
+    java.lang.Object ref = encryptionAlgorithm_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      encryptionAlgorithm_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int KEY_SHA256_BYTES_FIELD_NUMBER = 3;
+  private com.google.protobuf.ByteString keySha256Bytes_;
+  /**
+   *
+   *
+   * <pre>
+   * SHA256 hash value of the encryption key.
+   * In raw bytes format (not base64-encoded).
+   * </pre>
+   *
+   * <code>bytes key_sha256_bytes = 3;</code>
+   *
+   * @return The keySha256Bytes.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getKeySha256Bytes() {
+    return keySha256Bytes_;
+  }
+
+  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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encryptionAlgorithm_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, encryptionAlgorithm_);
+    }
+    if (!keySha256Bytes_.isEmpty()) {
+      output.writeBytes(3, keySha256Bytes_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encryptionAlgorithm_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, encryptionAlgorithm_);
+    }
+    if (!keySha256Bytes_.isEmpty()) {
+      size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, keySha256Bytes_);
+    }
+    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.storage.v2.CustomerEncryption)) {
+      return super.equals(obj);
+    }
+    com.google.storage.v2.CustomerEncryption other = (com.google.storage.v2.CustomerEncryption) obj;
+
+    if (!getEncryptionAlgorithm().equals(other.getEncryptionAlgorithm())) return false;
+    if (!getKeySha256Bytes().equals(other.getKeySha256Bytes())) 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) + ENCRYPTION_ALGORITHM_FIELD_NUMBER;
+    hash = (53 * hash) + getEncryptionAlgorithm().hashCode();
+    hash = (37 * hash) + KEY_SHA256_BYTES_FIELD_NUMBER;
+    hash = (53 * hash) + getKeySha256Bytes().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.storage.v2.CustomerEncryption parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption 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.storage.v2.CustomerEncryption parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption 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.storage.v2.CustomerEncryption parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption 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.storage.v2.CustomerEncryption parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.storage.v2.CustomerEncryption 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.storage.v2.CustomerEncryption 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>
+   * Describes the customer-specified mechanism used to store an Object's data at
+   * rest.
+   * </pre>
+   *
+   * Protobuf type {@code google.storage.v2.CustomerEncryption}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.storage.v2.CustomerEncryption)
+      com.google.storage.v2.CustomerEncryptionOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.storage.v2.StorageProto
+          .internal_static_google_storage_v2_CustomerEncryption_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.storage.v2.StorageProto
+          .internal_static_google_storage_v2_CustomerEncryption_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.storage.v2.CustomerEncryption.class,
+              com.google.storage.v2.CustomerEncryption.Builder.class);
+    }
+
+    // Construct using com.google.storage.v2.CustomerEncryption.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();
+      encryptionAlgorithm_ = "";
+
+      keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.storage.v2.StorageProto
+          .internal_static_google_storage_v2_CustomerEncryption_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.storage.v2.CustomerEncryption getDefaultInstanceForType() {
+      return com.google.storage.v2.CustomerEncryption.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.storage.v2.CustomerEncryption build() {
+      com.google.storage.v2.CustomerEncryption result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.storage.v2.CustomerEncryption buildPartial() {
+      com.google.storage.v2.CustomerEncryption result =
+          new com.google.storage.v2.CustomerEncryption(this);
+      result.encryptionAlgorithm_ = encryptionAlgorithm_;
+      result.keySha256Bytes_ = keySha256Bytes_;
+      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.storage.v2.CustomerEncryption) {
+        return mergeFrom((com.google.storage.v2.CustomerEncryption) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.storage.v2.CustomerEncryption other) {
+      if (other == com.google.storage.v2.CustomerEncryption.getDefaultInstance()) return this;
+      if (!other.getEncryptionAlgorithm().isEmpty()) {
+        encryptionAlgorithm_ = other.encryptionAlgorithm_;
+        onChanged();
+      }
+      if (other.getKeySha256Bytes() != com.google.protobuf.ByteString.EMPTY) {
+        setKeySha256Bytes(other.getKeySha256Bytes());
+      }
+      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.storage.v2.CustomerEncryption parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.storage.v2.CustomerEncryption) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object encryptionAlgorithm_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The encryption algorithm.
+     * </pre>
+     *
+     * <code>string encryption_algorithm = 1;</code>
+     *
+     * @return The encryptionAlgorithm.
+     */
+    public java.lang.String getEncryptionAlgorithm() {
+      java.lang.Object ref = encryptionAlgorithm_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        encryptionAlgorithm_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The encryption algorithm.
+     * </pre>
+     *
+     * <code>string encryption_algorithm = 1;</code>
+     *
+     * @return The bytes for encryptionAlgorithm.
+     */
+    public com.google.protobuf.ByteString getEncryptionAlgorithmBytes() {
+      java.lang.Object ref = encryptionAlgorithm_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        encryptionAlgorithm_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The encryption algorithm.
+     * </pre>
+     *
+     * <code>string encryption_algorithm = 1;</code>
+     *
+     * @param value The encryptionAlgorithm to set.
+     * @return This builder for chaining.
+     */
+    public Builder setEncryptionAlgorithm(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      encryptionAlgorithm_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The encryption algorithm.
+     * </pre>
+     *
+     * <code>string encryption_algorithm = 1;</code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearEncryptionAlgorithm() {
+
+      encryptionAlgorithm_ = getDefaultInstance().getEncryptionAlgorithm();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The encryption algorithm.
+     * </pre>
+     *
+     * <code>string encryption_algorithm = 1;</code>
+     *
+     * @param value The bytes for encryptionAlgorithm to set.
+     * @return This builder for chaining.
+     */
+    public Builder setEncryptionAlgorithmBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      encryptionAlgorithm_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.ByteString keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     *
+     *
+     * <pre>
+     * SHA256 hash value of the encryption key.
+     * In raw bytes format (not base64-encoded).
+     * </pre>
+     *
+     * <code>bytes key_sha256_bytes = 3;</code>
+     *
+     * @return The keySha256Bytes.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getKeySha256Bytes() {
+      return keySha256Bytes_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * SHA256 hash value of the encryption key.
+     * In raw bytes format (not base64-encoded).
+     * </pre>
+     *
+     * <code>bytes key_sha256_bytes = 3;</code>
+     *
+     * @param value The keySha256Bytes to set.
+     * @return This builder for chaining.
+     */
+    public Builder setKeySha256Bytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      keySha256Bytes_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * SHA256 hash value of the encryption key.
+     * In raw bytes format (not base64-encoded).
+     * </pre>
+     *
+     * <code>bytes key_sha256_bytes = 3;</code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearKeySha256Bytes() {
+
+      keySha256Bytes_ = getDefaultInstance().getKeySha256Bytes();
+      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.storage.v2.CustomerEncryption)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.storage.v2.CustomerEncryption)
+  private static final com.google.storage.v2.CustomerEncryption DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.storage.v2.CustomerEncryption();
+  }
+
+  public static com.google.storage.v2.CustomerEncryption getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<CustomerEncryption> PARSER =
+      new com.google.protobuf.AbstractParser<CustomerEncryption>() {
+        @java.lang.Override
+        public CustomerEncryption parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new CustomerEncryption(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<CustomerEncryption> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<CustomerEncryption> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.storage.v2.CustomerEncryption getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java
new file mode 100644
index 00000000..42a2b1ef
--- /dev/null
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/CustomerEncryptionOrBuilder.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2020 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.
+ */
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/storage/v2/storage.proto
+
+package com.google.storage.v2;
+
+public interface CustomerEncryptionOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.storage.v2.CustomerEncryption)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The encryption algorithm.
+   * </pre>
+   *
+   * <code>string encryption_algorithm = 1;</code>
+   *
+   * @return The encryptionAlgorithm.
+   */
+  java.lang.String getEncryptionAlgorithm();
+  /**
+   *
+   *
+   * <pre>
+   * The encryption algorithm.
+   * </pre>
+   *
+   * <code>string encryption_algorithm = 1;</code>
+   *
+   * @return The bytes for encryptionAlgorithm.
+   */
+  com.google.protobuf.ByteString getEncryptionAlgorithmBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * SHA256 hash value of the encryption key.
+   * In raw bytes format (not base64-encoded).
+   * </pre>
+   *
+   * <code>bytes key_sha256_bytes = 3;</code>
+   *
+   * @return The keySha256Bytes.
+   */
+  com.google.protobuf.ByteString getKeySha256Bytes();
+}
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Notification.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Notification.java
index 1cf94426..e0c3a914 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Notification.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Notification.java
@@ -186,8 +186,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
    * <pre>
    * Required. The resource name of this notification.
    * Format:
-   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-   * `{project}` portion may be `_` for globally unique buckets.
+   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+   * The `{project}` portion may be `_` for globally unique buckets.
    * </pre>
    *
    * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -212,8 +212,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
    * <pre>
    * Required. The resource name of this notification.
    * Format:
-   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-   * `{project}` portion may be `_` for globally unique buckets.
+   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+   * The `{project}` portion may be `_` for globally unique buckets.
    * </pre>
    *
    * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -1007,8 +1007,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
      * <pre>
      * Required. The resource name of this notification.
      * Format:
-     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-     * `{project}` portion may be `_` for globally unique buckets.
+     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+     * The `{project}` portion may be `_` for globally unique buckets.
      * </pre>
      *
      * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -1032,8 +1032,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
      * <pre>
      * Required. The resource name of this notification.
      * Format:
-     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-     * `{project}` portion may be `_` for globally unique buckets.
+     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+     * The `{project}` portion may be `_` for globally unique buckets.
      * </pre>
      *
      * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -1057,8 +1057,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
      * <pre>
      * Required. The resource name of this notification.
      * Format:
-     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-     * `{project}` portion may be `_` for globally unique buckets.
+     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+     * The `{project}` portion may be `_` for globally unique buckets.
      * </pre>
      *
      * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -1081,8 +1081,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
      * <pre>
      * Required. The resource name of this notification.
      * Format:
-     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-     * `{project}` portion may be `_` for globally unique buckets.
+     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+     * The `{project}` portion may be `_` for globally unique buckets.
      * </pre>
      *
      * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -1101,8 +1101,8 @@ public final class Notification extends com.google.protobuf.GeneratedMessageV3
      * <pre>
      * Required. The resource name of this notification.
      * Format:
-     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-     * `{project}` portion may be `_` for globally unique buckets.
+     * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+     * The `{project}` portion may be `_` for globally unique buckets.
      * </pre>
      *
      * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationOrBuilder.java
index 41be30dc..2d19e427 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/NotificationOrBuilder.java
@@ -29,8 +29,8 @@ public interface NotificationOrBuilder
    * <pre>
    * Required. The resource name of this notification.
    * Format:
-   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-   * `{project}` portion may be `_` for globally unique buckets.
+   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+   * The `{project}` portion may be `_` for globally unique buckets.
    * </pre>
    *
    * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
@@ -44,8 +44,8 @@ public interface NotificationOrBuilder
    * <pre>
    * Required. The resource name of this notification.
    * Format:
-   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-   * `{project}` portion may be `_` for globally unique buckets.
+   * `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+   * The `{project}` portion may be `_` for globally unique buckets.
    * </pre>
    *
    * <code>string name = 1 [(.google.api.field_behavior) = REQUIRED];</code>
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
index ce256ffb..b2b257a4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/Object.java
@@ -307,13 +307,13 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
             }
           case 202:
             {
-              com.google.storage.v2.Object.CustomerEncryption.Builder subBuilder = null;
+              com.google.storage.v2.CustomerEncryption.Builder subBuilder = null;
               if (customerEncryption_ != null) {
                 subBuilder = customerEncryption_.toBuilder();
               }
               customerEncryption_ =
                   input.readMessage(
-                      com.google.storage.v2.Object.CustomerEncryption.parser(), extensionRegistry);
+                      com.google.storage.v2.CustomerEncryption.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(customerEncryption_);
                 customerEncryption_ = subBuilder.buildPartial();
@@ -382,770 +382,6 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
             com.google.storage.v2.Object.class, com.google.storage.v2.Object.Builder.class);
   }
 
-  public interface CustomerEncryptionOrBuilder
-      extends
-      // @@protoc_insertion_point(interface_extends:google.storage.v2.Object.CustomerEncryption)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     *
-     *
-     * <pre>
-     * The encryption algorithm.
-     * </pre>
-     *
-     * <code>string encryption_algorithm = 1;</code>
-     *
-     * @return The encryptionAlgorithm.
-     */
-    java.lang.String getEncryptionAlgorithm();
-    /**
-     *
-     *
-     * <pre>
-     * The encryption algorithm.
-     * </pre>
-     *
-     * <code>string encryption_algorithm = 1;</code>
-     *
-     * @return The bytes for encryptionAlgorithm.
-     */
-    com.google.protobuf.ByteString getEncryptionAlgorithmBytes();
-
-    /**
-     *
-     *
-     * <pre>
-     * SHA256 hash value of the encryption key.
-     * In raw bytes format (not base64-encoded).
-     * </pre>
-     *
-     * <code>bytes key_sha256_bytes = 3;</code>
-     *
-     * @return The keySha256Bytes.
-     */
-    com.google.protobuf.ByteString getKeySha256Bytes();
-  }
-  /**
-   *
-   *
-   * <pre>
-   * Describes the customer-specified mechanism used to store the data at rest.
-   * </pre>
-   *
-   * Protobuf type {@code google.storage.v2.Object.CustomerEncryption}
-   */
-  public static final class CustomerEncryption extends com.google.protobuf.GeneratedMessageV3
-      implements
-      // @@protoc_insertion_point(message_implements:google.storage.v2.Object.CustomerEncryption)
-      CustomerEncryptionOrBuilder {
-    private static final long serialVersionUID = 0L;
-    // Use CustomerEncryption.newBuilder() to construct.
-    private CustomerEncryption(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-
-    private CustomerEncryption() {
-      encryptionAlgorithm_ = "";
-      keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-      return new CustomerEncryption();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
-    private CustomerEncryption(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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();
-
-                encryptionAlgorithm_ = s;
-                break;
-              }
-            case 26:
-              {
-                keySha256Bytes_ = input.readBytes();
-                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.storage.v2.StorageProto
-          .internal_static_google_storage_v2_Object_CustomerEncryption_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.google.storage.v2.StorageProto
-          .internal_static_google_storage_v2_Object_CustomerEncryption_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              com.google.storage.v2.Object.CustomerEncryption.class,
-              com.google.storage.v2.Object.CustomerEncryption.Builder.class);
-    }
-
-    public static final int ENCRYPTION_ALGORITHM_FIELD_NUMBER = 1;
-    private volatile java.lang.Object encryptionAlgorithm_;
-    /**
-     *
-     *
-     * <pre>
-     * The encryption algorithm.
-     * </pre>
-     *
-     * <code>string encryption_algorithm = 1;</code>
-     *
-     * @return The encryptionAlgorithm.
-     */
-    @java.lang.Override
-    public java.lang.String getEncryptionAlgorithm() {
-      java.lang.Object ref = encryptionAlgorithm_;
-      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();
-        encryptionAlgorithm_ = s;
-        return s;
-      }
-    }
-    /**
-     *
-     *
-     * <pre>
-     * The encryption algorithm.
-     * </pre>
-     *
-     * <code>string encryption_algorithm = 1;</code>
-     *
-     * @return The bytes for encryptionAlgorithm.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString getEncryptionAlgorithmBytes() {
-      java.lang.Object ref = encryptionAlgorithm_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b =
-            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-        encryptionAlgorithm_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int KEY_SHA256_BYTES_FIELD_NUMBER = 3;
-    private com.google.protobuf.ByteString keySha256Bytes_;
-    /**
-     *
-     *
-     * <pre>
-     * SHA256 hash value of the encryption key.
-     * In raw bytes format (not base64-encoded).
-     * </pre>
-     *
-     * <code>bytes key_sha256_bytes = 3;</code>
-     *
-     * @return The keySha256Bytes.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString getKeySha256Bytes() {
-      return keySha256Bytes_;
-    }
-
-    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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encryptionAlgorithm_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, encryptionAlgorithm_);
-      }
-      if (!keySha256Bytes_.isEmpty()) {
-        output.writeBytes(3, keySha256Bytes_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encryptionAlgorithm_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, encryptionAlgorithm_);
-      }
-      if (!keySha256Bytes_.isEmpty()) {
-        size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, keySha256Bytes_);
-      }
-      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.storage.v2.Object.CustomerEncryption)) {
-        return super.equals(obj);
-      }
-      com.google.storage.v2.Object.CustomerEncryption other =
-          (com.google.storage.v2.Object.CustomerEncryption) obj;
-
-      if (!getEncryptionAlgorithm().equals(other.getEncryptionAlgorithm())) return false;
-      if (!getKeySha256Bytes().equals(other.getKeySha256Bytes())) 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) + ENCRYPTION_ALGORITHM_FIELD_NUMBER;
-      hash = (53 * hash) + getEncryptionAlgorithm().hashCode();
-      hash = (37 * hash) + KEY_SHA256_BYTES_FIELD_NUMBER;
-      hash = (53 * hash) + getKeySha256Bytes().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption parseFrom(
-        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption parseFrom(
-        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption 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.storage.v2.Object.CustomerEncryption parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption parseFrom(
-        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption parseFrom(
-        java.io.InputStream input) throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption 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.storage.v2.Object.CustomerEncryption parseDelimitedFrom(
-        java.io.InputStream input) throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption 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.storage.v2.Object.CustomerEncryption parseFrom(
-        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption 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.storage.v2.Object.CustomerEncryption 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>
-     * Describes the customer-specified mechanism used to store the data at rest.
-     * </pre>
-     *
-     * Protobuf type {@code google.storage.v2.Object.CustomerEncryption}
-     */
-    public static final class Builder
-        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
-        implements
-        // @@protoc_insertion_point(builder_implements:google.storage.v2.Object.CustomerEncryption)
-        com.google.storage.v2.Object.CustomerEncryptionOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-        return com.google.storage.v2.StorageProto
-            .internal_static_google_storage_v2_Object_CustomerEncryption_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return com.google.storage.v2.StorageProto
-            .internal_static_google_storage_v2_Object_CustomerEncryption_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                com.google.storage.v2.Object.CustomerEncryption.class,
-                com.google.storage.v2.Object.CustomerEncryption.Builder.class);
-      }
-
-      // Construct using com.google.storage.v2.Object.CustomerEncryption.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();
-        encryptionAlgorithm_ = "";
-
-        keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-        return com.google.storage.v2.StorageProto
-            .internal_static_google_storage_v2_Object_CustomerEncryption_descriptor;
-      }
-
-      @java.lang.Override
-      public com.google.storage.v2.Object.CustomerEncryption getDefaultInstanceForType() {
-        return com.google.storage.v2.Object.CustomerEncryption.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public com.google.storage.v2.Object.CustomerEncryption build() {
-        com.google.storage.v2.Object.CustomerEncryption result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public com.google.storage.v2.Object.CustomerEncryption buildPartial() {
-        com.google.storage.v2.Object.CustomerEncryption result =
-            new com.google.storage.v2.Object.CustomerEncryption(this);
-        result.encryptionAlgorithm_ = encryptionAlgorithm_;
-        result.keySha256Bytes_ = keySha256Bytes_;
-        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.storage.v2.Object.CustomerEncryption) {
-          return mergeFrom((com.google.storage.v2.Object.CustomerEncryption) other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(com.google.storage.v2.Object.CustomerEncryption other) {
-        if (other == com.google.storage.v2.Object.CustomerEncryption.getDefaultInstance())
-          return this;
-        if (!other.getEncryptionAlgorithm().isEmpty()) {
-          encryptionAlgorithm_ = other.encryptionAlgorithm_;
-          onChanged();
-        }
-        if (other.getKeySha256Bytes() != com.google.protobuf.ByteString.EMPTY) {
-          setKeySha256Bytes(other.getKeySha256Bytes());
-        }
-        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.storage.v2.Object.CustomerEncryption parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage =
-              (com.google.storage.v2.Object.CustomerEncryption) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object encryptionAlgorithm_ = "";
-      /**
-       *
-       *
-       * <pre>
-       * The encryption algorithm.
-       * </pre>
-       *
-       * <code>string encryption_algorithm = 1;</code>
-       *
-       * @return The encryptionAlgorithm.
-       */
-      public java.lang.String getEncryptionAlgorithm() {
-        java.lang.Object ref = encryptionAlgorithm_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          encryptionAlgorithm_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       *
-       *
-       * <pre>
-       * The encryption algorithm.
-       * </pre>
-       *
-       * <code>string encryption_algorithm = 1;</code>
-       *
-       * @return The bytes for encryptionAlgorithm.
-       */
-      public com.google.protobuf.ByteString getEncryptionAlgorithmBytes() {
-        java.lang.Object ref = encryptionAlgorithm_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b =
-              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-          encryptionAlgorithm_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       *
-       *
-       * <pre>
-       * The encryption algorithm.
-       * </pre>
-       *
-       * <code>string encryption_algorithm = 1;</code>
-       *
-       * @param value The encryptionAlgorithm to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEncryptionAlgorithm(java.lang.String value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-
-        encryptionAlgorithm_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       *
-       *
-       * <pre>
-       * The encryption algorithm.
-       * </pre>
-       *
-       * <code>string encryption_algorithm = 1;</code>
-       *
-       * @return This builder for chaining.
-       */
-      public Builder clearEncryptionAlgorithm() {
-
-        encryptionAlgorithm_ = getDefaultInstance().getEncryptionAlgorithm();
-        onChanged();
-        return this;
-      }
-      /**
-       *
-       *
-       * <pre>
-       * The encryption algorithm.
-       * </pre>
-       *
-       * <code>string encryption_algorithm = 1;</code>
-       *
-       * @param value The bytes for encryptionAlgorithm to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEncryptionAlgorithmBytes(com.google.protobuf.ByteString value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        checkByteStringIsUtf8(value);
-
-        encryptionAlgorithm_ = value;
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.ByteString keySha256Bytes_ = com.google.protobuf.ByteString.EMPTY;
-      /**
-       *
-       *
-       * <pre>
-       * SHA256 hash value of the encryption key.
-       * In raw bytes format (not base64-encoded).
-       * </pre>
-       *
-       * <code>bytes key_sha256_bytes = 3;</code>
-       *
-       * @return The keySha256Bytes.
-       */
-      @java.lang.Override
-      public com.google.protobuf.ByteString getKeySha256Bytes() {
-        return keySha256Bytes_;
-      }
-      /**
-       *
-       *
-       * <pre>
-       * SHA256 hash value of the encryption key.
-       * In raw bytes format (not base64-encoded).
-       * </pre>
-       *
-       * <code>bytes key_sha256_bytes = 3;</code>
-       *
-       * @param value The keySha256Bytes to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKeySha256Bytes(com.google.protobuf.ByteString value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-
-        keySha256Bytes_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       *
-       *
-       * <pre>
-       * SHA256 hash value of the encryption key.
-       * In raw bytes format (not base64-encoded).
-       * </pre>
-       *
-       * <code>bytes key_sha256_bytes = 3;</code>
-       *
-       * @return This builder for chaining.
-       */
-      public Builder clearKeySha256Bytes() {
-
-        keySha256Bytes_ = getDefaultInstance().getKeySha256Bytes();
-        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.storage.v2.Object.CustomerEncryption)
-    }
-
-    // @@protoc_insertion_point(class_scope:google.storage.v2.Object.CustomerEncryption)
-    private static final com.google.storage.v2.Object.CustomerEncryption DEFAULT_INSTANCE;
-
-    static {
-      DEFAULT_INSTANCE = new com.google.storage.v2.Object.CustomerEncryption();
-    }
-
-    public static com.google.storage.v2.Object.CustomerEncryption getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<CustomerEncryption> PARSER =
-        new com.google.protobuf.AbstractParser<CustomerEncryption>() {
-          @java.lang.Override
-          public CustomerEncryption parsePartialFrom(
-              com.google.protobuf.CodedInputStream input,
-              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-              throws com.google.protobuf.InvalidProtocolBufferException {
-            return new CustomerEncryption(input, extensionRegistry);
-          }
-        };
-
-    public static com.google.protobuf.Parser<CustomerEncryption> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<CustomerEncryption> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.storage.v2.Object.CustomerEncryption getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-  }
-
   private int bitField0_;
   public static final int NAME_FIELD_NUMBER = 1;
   private volatile java.lang.Object name_;
@@ -2367,7 +1603,7 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
   }
 
   public static final int CUSTOMER_ENCRYPTION_FIELD_NUMBER = 25;
-  private com.google.storage.v2.Object.CustomerEncryption customerEncryption_;
+  private com.google.storage.v2.CustomerEncryption customerEncryption_;
   /**
    *
    *
@@ -2376,7 +1612,7 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    *
    * @return Whether the customerEncryption field is set.
    */
@@ -2392,14 +1628,14 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    *
    * @return The customerEncryption.
    */
   @java.lang.Override
-  public com.google.storage.v2.Object.CustomerEncryption getCustomerEncryption() {
+  public com.google.storage.v2.CustomerEncryption getCustomerEncryption() {
     return customerEncryption_ == null
-        ? com.google.storage.v2.Object.CustomerEncryption.getDefaultInstance()
+        ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
         : customerEncryption_;
   }
   /**
@@ -2410,10 +1646,10 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    */
   @java.lang.Override
-  public com.google.storage.v2.Object.CustomerEncryptionOrBuilder getCustomerEncryptionOrBuilder() {
+  public com.google.storage.v2.CustomerEncryptionOrBuilder getCustomerEncryptionOrBuilder() {
     return getCustomerEncryption();
   }
 
@@ -6907,11 +6143,11 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
       return ownerBuilder_;
     }
 
-    private com.google.storage.v2.Object.CustomerEncryption customerEncryption_;
+    private com.google.storage.v2.CustomerEncryption customerEncryption_;
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.storage.v2.Object.CustomerEncryption,
-            com.google.storage.v2.Object.CustomerEncryption.Builder,
-            com.google.storage.v2.Object.CustomerEncryptionOrBuilder>
+            com.google.storage.v2.CustomerEncryption,
+            com.google.storage.v2.CustomerEncryption.Builder,
+            com.google.storage.v2.CustomerEncryptionOrBuilder>
         customerEncryptionBuilder_;
     /**
      *
@@ -6921,7 +6157,7 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      *
      * @return Whether the customerEncryption field is set.
      */
@@ -6936,14 +6172,14 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      *
      * @return The customerEncryption.
      */
-    public com.google.storage.v2.Object.CustomerEncryption getCustomerEncryption() {
+    public com.google.storage.v2.CustomerEncryption getCustomerEncryption() {
       if (customerEncryptionBuilder_ == null) {
         return customerEncryption_ == null
-            ? com.google.storage.v2.Object.CustomerEncryption.getDefaultInstance()
+            ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
             : customerEncryption_;
       } else {
         return customerEncryptionBuilder_.getMessage();
@@ -6957,9 +6193,9 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
-    public Builder setCustomerEncryption(com.google.storage.v2.Object.CustomerEncryption value) {
+    public Builder setCustomerEncryption(com.google.storage.v2.CustomerEncryption value) {
       if (customerEncryptionBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -6980,10 +6216,10 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
     public Builder setCustomerEncryption(
-        com.google.storage.v2.Object.CustomerEncryption.Builder builderForValue) {
+        com.google.storage.v2.CustomerEncryption.Builder builderForValue) {
       if (customerEncryptionBuilder_ == null) {
         customerEncryption_ = builderForValue.build();
         onChanged();
@@ -7001,13 +6237,13 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
-    public Builder mergeCustomerEncryption(com.google.storage.v2.Object.CustomerEncryption value) {
+    public Builder mergeCustomerEncryption(com.google.storage.v2.CustomerEncryption value) {
       if (customerEncryptionBuilder_ == null) {
         if (customerEncryption_ != null) {
           customerEncryption_ =
-              com.google.storage.v2.Object.CustomerEncryption.newBuilder(customerEncryption_)
+              com.google.storage.v2.CustomerEncryption.newBuilder(customerEncryption_)
                   .mergeFrom(value)
                   .buildPartial();
         } else {
@@ -7028,7 +6264,7 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
     public Builder clearCustomerEncryption() {
       if (customerEncryptionBuilder_ == null) {
@@ -7049,9 +6285,9 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
-    public com.google.storage.v2.Object.CustomerEncryption.Builder getCustomerEncryptionBuilder() {
+    public com.google.storage.v2.CustomerEncryption.Builder getCustomerEncryptionBuilder() {
 
       onChanged();
       return getCustomerEncryptionFieldBuilder().getBuilder();
@@ -7064,15 +6300,14 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
-    public com.google.storage.v2.Object.CustomerEncryptionOrBuilder
-        getCustomerEncryptionOrBuilder() {
+    public com.google.storage.v2.CustomerEncryptionOrBuilder getCustomerEncryptionOrBuilder() {
       if (customerEncryptionBuilder_ != null) {
         return customerEncryptionBuilder_.getMessageOrBuilder();
       } else {
         return customerEncryption_ == null
-            ? com.google.storage.v2.Object.CustomerEncryption.getDefaultInstance()
+            ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
             : customerEncryption_;
       }
     }
@@ -7084,19 +6319,19 @@ public final class Object extends com.google.protobuf.GeneratedMessageV3
      * such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+     * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
      */
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.storage.v2.Object.CustomerEncryption,
-            com.google.storage.v2.Object.CustomerEncryption.Builder,
-            com.google.storage.v2.Object.CustomerEncryptionOrBuilder>
+            com.google.storage.v2.CustomerEncryption,
+            com.google.storage.v2.CustomerEncryption.Builder,
+            com.google.storage.v2.CustomerEncryptionOrBuilder>
         getCustomerEncryptionFieldBuilder() {
       if (customerEncryptionBuilder_ == null) {
         customerEncryptionBuilder_ =
             new com.google.protobuf.SingleFieldBuilderV3<
-                com.google.storage.v2.Object.CustomerEncryption,
-                com.google.storage.v2.Object.CustomerEncryption.Builder,
-                com.google.storage.v2.Object.CustomerEncryptionOrBuilder>(
+                com.google.storage.v2.CustomerEncryption,
+                com.google.storage.v2.CustomerEncryption.Builder,
+                com.google.storage.v2.CustomerEncryptionOrBuilder>(
                 getCustomerEncryption(), getParentForChildren(), isClean());
         customerEncryption_ = null;
       }
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
index c82202c2..56140e3b 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ObjectOrBuilder.java
@@ -856,7 +856,7 @@ public interface ObjectOrBuilder
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    *
    * @return Whether the customerEncryption field is set.
    */
@@ -869,11 +869,11 @@ public interface ObjectOrBuilder
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    *
    * @return The customerEncryption.
    */
-  com.google.storage.v2.Object.CustomerEncryption getCustomerEncryption();
+  com.google.storage.v2.CustomerEncryption getCustomerEncryption();
   /**
    *
    *
@@ -882,9 +882,9 @@ public interface ObjectOrBuilder
    * such a key.
    * </pre>
    *
-   * <code>.google.storage.v2.Object.CustomerEncryption customer_encryption = 25;</code>
+   * <code>.google.storage.v2.CustomerEncryption customer_encryption = 25;</code>
    */
-  com.google.storage.v2.Object.CustomerEncryptionOrBuilder getCustomerEncryptionOrBuilder();
+  com.google.storage.v2.CustomerEncryptionOrBuilder getCustomerEncryptionOrBuilder();
 
   /**
    *
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
index 3d613410..f29ce456 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequest.java
@@ -38,6 +38,8 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
   }
 
   private RewriteObjectRequest() {
+    destinationName_ = "";
+    destinationBucket_ = "";
     sourceBucket_ = "";
     sourceObject_ = "";
     rewriteToken_ = "";
@@ -227,17 +229,32 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
               copySourceEncryptionKeySha256Bytes_ = input.readBytes();
               break;
             }
-          case 186:
+          case 194:
             {
-              com.google.protobuf.FieldMask.Builder subBuilder = null;
-              if (rewriteMask_ != null) {
-                subBuilder = rewriteMask_.toBuilder();
+              java.lang.String s = input.readStringRequireUtf8();
+
+              destinationName_ = s;
+              break;
+            }
+          case 202:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              destinationBucket_ = s;
+              break;
+            }
+          case 210:
+            {
+              com.google.storage.v2.CustomerEncryption.Builder subBuilder = null;
+              if (destinationCustomerEncryption_ != null) {
+                subBuilder = destinationCustomerEncryption_.toBuilder();
               }
-              rewriteMask_ =
-                  input.readMessage(com.google.protobuf.FieldMask.parser(), extensionRegistry);
+              destinationCustomerEncryption_ =
+                  input.readMessage(
+                      com.google.storage.v2.CustomerEncryption.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(rewriteMask_);
-                rewriteMask_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(destinationCustomerEncryption_);
+                destinationCustomerEncryption_ = subBuilder.buildPartial();
               }
 
               break;
@@ -277,120 +294,234 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
   }
 
   private int bitField0_;
-  public static final int DESTINATION_FIELD_NUMBER = 1;
-  private com.google.storage.v2.Object destination_;
+  public static final int DESTINATION_NAME_FIELD_NUMBER = 24;
+  private volatile java.lang.Object destinationName_;
   /**
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the destination object. Nearly any sequence of unicode
+   * characters is valid. See
+   * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+   * Example: `test.txt`
+   * The `name` field by itself does not uniquely identify a Cloud Storage
+   * object. A Cloud Storage object is uniquely identified by the tuple of
+   * (bucket, object, generation).
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
    *
-   * @return Whether the destination field is set.
+   * @return The destinationName.
    */
   @java.lang.Override
-  public boolean hasDestination() {
-    return destination_ != null;
+  public java.lang.String getDestinationName() {
+    java.lang.Object ref = destinationName_;
+    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();
+      destinationName_ = s;
+      return s;
+    }
   }
   /**
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the destination object. Nearly any sequence of unicode
+   * characters is valid. See
+   * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+   * Example: `test.txt`
+   * The `name` field by itself does not uniquely identify a Cloud Storage
+   * object. A Cloud Storage object is uniquely identified by the tuple of
+   * (bucket, object, generation).
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
    *
-   * @return The destination.
+   * @return The bytes for destinationName.
    */
   @java.lang.Override
-  public com.google.storage.v2.Object getDestination() {
-    return destination_ == null ? com.google.storage.v2.Object.getDefaultInstance() : destination_;
+  public com.google.protobuf.ByteString getDestinationNameBytes() {
+    java.lang.Object ref = destinationName_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      destinationName_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
   }
+
+  public static final int DESTINATION_BUCKET_FIELD_NUMBER = 25;
+  private volatile java.lang.Object destinationBucket_;
   /**
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the bucket containing The name of the destination object.
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>
+   * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+   * </code>
+   *
+   * @return The destinationBucket.
    */
   @java.lang.Override
-  public com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder() {
-    return getDestination();
+  public java.lang.String getDestinationBucket() {
+    java.lang.Object ref = destinationBucket_;
+    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();
+      destinationBucket_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Immutable. The name of the bucket containing The name of the destination object.
+   * </pre>
+   *
+   * <code>
+   * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+   * </code>
+   *
+   * @return The bytes for destinationBucket.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getDestinationBucketBytes() {
+    java.lang.Object ref = destinationBucket_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      destinationBucket_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int DESTINATION_CUSTOMER_ENCRYPTION_FIELD_NUMBER = 26;
+  private com.google.storage.v2.CustomerEncryption destinationCustomerEncryption_;
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   *
+   * @return Whether the destinationCustomerEncryption field is set.
+   */
+  @java.lang.Override
+  public boolean hasDestinationCustomerEncryption() {
+    return destinationCustomerEncryption_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   *
+   * @return The destinationCustomerEncryption.
+   */
+  @java.lang.Override
+  public com.google.storage.v2.CustomerEncryption getDestinationCustomerEncryption() {
+    return destinationCustomerEncryption_ == null
+        ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
+        : destinationCustomerEncryption_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   */
+  @java.lang.Override
+  public com.google.storage.v2.CustomerEncryptionOrBuilder
+      getDestinationCustomerEncryptionOrBuilder() {
+    return getDestinationCustomerEncryption();
   }
 
-  public static final int REWRITE_MASK_FIELD_NUMBER = 23;
-  private com.google.protobuf.FieldMask rewriteMask_;
+  public static final int DESTINATION_FIELD_NUMBER = 1;
+  private com.google.storage.v2.Object destination_;
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    *
-   * @return Whether the rewriteMask field is set.
+   * @return Whether the destination field is set.
    */
   @java.lang.Override
-  public boolean hasRewriteMask() {
-    return rewriteMask_ != null;
+  public boolean hasDestination() {
+    return destination_ != null;
   }
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    *
-   * @return The rewriteMask.
+   * @return The destination.
    */
   @java.lang.Override
-  public com.google.protobuf.FieldMask getRewriteMask() {
-    return rewriteMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : rewriteMask_;
+  public com.google.storage.v2.Object getDestination() {
+    return destination_ == null ? com.google.storage.v2.Object.getDefaultInstance() : destination_;
   }
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    */
   @java.lang.Override
-  public com.google.protobuf.FieldMaskOrBuilder getRewriteMaskOrBuilder() {
-    return getRewriteMask();
+  public com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder() {
+    return getDestination();
   }
 
   public static final int SOURCE_BUCKET_FIELD_NUMBER = 2;
@@ -1175,8 +1306,14 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
     if (!copySourceEncryptionKeySha256Bytes_.isEmpty()) {
       output.writeBytes(22, copySourceEncryptionKeySha256Bytes_);
     }
-    if (rewriteMask_ != null) {
-      output.writeMessage(23, getRewriteMask());
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(destinationName_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 24, destinationName_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(destinationBucket_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 25, destinationBucket_);
+    }
+    if (destinationCustomerEncryption_ != null) {
+      output.writeMessage(26, getDestinationCustomerEncryption());
     }
     unknownFields.writeTo(output);
   }
@@ -1261,8 +1398,16 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
           com.google.protobuf.CodedOutputStream.computeBytesSize(
               22, copySourceEncryptionKeySha256Bytes_);
     }
-    if (rewriteMask_ != null) {
-      size += com.google.protobuf.CodedOutputStream.computeMessageSize(23, getRewriteMask());
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(destinationName_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(24, destinationName_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(destinationBucket_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(25, destinationBucket_);
+    }
+    if (destinationCustomerEncryption_ != null) {
+      size +=
+          com.google.protobuf.CodedOutputStream.computeMessageSize(
+              26, getDestinationCustomerEncryption());
     }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
@@ -1280,14 +1425,18 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
     com.google.storage.v2.RewriteObjectRequest other =
         (com.google.storage.v2.RewriteObjectRequest) obj;
 
+    if (!getDestinationName().equals(other.getDestinationName())) return false;
+    if (!getDestinationBucket().equals(other.getDestinationBucket())) return false;
+    if (hasDestinationCustomerEncryption() != other.hasDestinationCustomerEncryption())
+      return false;
+    if (hasDestinationCustomerEncryption()) {
+      if (!getDestinationCustomerEncryption().equals(other.getDestinationCustomerEncryption()))
+        return false;
+    }
     if (hasDestination() != other.hasDestination()) return false;
     if (hasDestination()) {
       if (!getDestination().equals(other.getDestination())) return false;
     }
-    if (hasRewriteMask() != other.hasRewriteMask()) return false;
-    if (hasRewriteMask()) {
-      if (!getRewriteMask().equals(other.getRewriteMask())) return false;
-    }
     if (!getSourceBucket().equals(other.getSourceBucket())) return false;
     if (!getSourceObject().equals(other.getSourceObject())) return false;
     if (getSourceGeneration() != other.getSourceGeneration()) return false;
@@ -1354,14 +1503,18 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
     }
     int hash = 41;
     hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + DESTINATION_NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getDestinationName().hashCode();
+    hash = (37 * hash) + DESTINATION_BUCKET_FIELD_NUMBER;
+    hash = (53 * hash) + getDestinationBucket().hashCode();
+    if (hasDestinationCustomerEncryption()) {
+      hash = (37 * hash) + DESTINATION_CUSTOMER_ENCRYPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getDestinationCustomerEncryption().hashCode();
+    }
     if (hasDestination()) {
       hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
       hash = (53 * hash) + getDestination().hashCode();
     }
-    if (hasRewriteMask()) {
-      hash = (37 * hash) + REWRITE_MASK_FIELD_NUMBER;
-      hash = (53 * hash) + getRewriteMask().hashCode();
-    }
     hash = (37 * hash) + SOURCE_BUCKET_FIELD_NUMBER;
     hash = (53 * hash) + getSourceBucket().hashCode();
     hash = (37 * hash) + SOURCE_OBJECT_FIELD_NUMBER;
@@ -1566,18 +1719,22 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
     @java.lang.Override
     public Builder clear() {
       super.clear();
+      destinationName_ = "";
+
+      destinationBucket_ = "";
+
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        destinationCustomerEncryption_ = null;
+      } else {
+        destinationCustomerEncryption_ = null;
+        destinationCustomerEncryptionBuilder_ = null;
+      }
       if (destinationBuilder_ == null) {
         destination_ = null;
       } else {
         destination_ = null;
         destinationBuilder_ = null;
       }
-      if (rewriteMaskBuilder_ == null) {
-        rewriteMask_ = null;
-      } else {
-        rewriteMask_ = null;
-        rewriteMaskBuilder_ = null;
-      }
       sourceBucket_ = "";
 
       sourceObject_ = "";
@@ -1653,16 +1810,18 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
           new com.google.storage.v2.RewriteObjectRequest(this);
       int from_bitField0_ = bitField0_;
       int to_bitField0_ = 0;
+      result.destinationName_ = destinationName_;
+      result.destinationBucket_ = destinationBucket_;
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        result.destinationCustomerEncryption_ = destinationCustomerEncryption_;
+      } else {
+        result.destinationCustomerEncryption_ = destinationCustomerEncryptionBuilder_.build();
+      }
       if (destinationBuilder_ == null) {
         result.destination_ = destination_;
       } else {
         result.destination_ = destinationBuilder_.build();
       }
-      if (rewriteMaskBuilder_ == null) {
-        result.rewriteMask_ = rewriteMask_;
-      } else {
-        result.rewriteMask_ = rewriteMaskBuilder_.build();
-      }
       result.sourceBucket_ = sourceBucket_;
       result.sourceObject_ = sourceObject_;
       result.sourceGeneration_ = sourceGeneration_;
@@ -1764,12 +1923,20 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
 
     public Builder mergeFrom(com.google.storage.v2.RewriteObjectRequest other) {
       if (other == com.google.storage.v2.RewriteObjectRequest.getDefaultInstance()) return this;
+      if (!other.getDestinationName().isEmpty()) {
+        destinationName_ = other.destinationName_;
+        onChanged();
+      }
+      if (!other.getDestinationBucket().isEmpty()) {
+        destinationBucket_ = other.destinationBucket_;
+        onChanged();
+      }
+      if (other.hasDestinationCustomerEncryption()) {
+        mergeDestinationCustomerEncryption(other.getDestinationCustomerEncryption());
+      }
       if (other.hasDestination()) {
         mergeDestination(other.getDestination());
       }
-      if (other.hasRewriteMask()) {
-        mergeRewriteMask(other.getRewriteMask());
-      }
       if (!other.getSourceBucket().isEmpty()) {
         sourceBucket_ = other.sourceBucket_;
         onChanged();
@@ -1862,67 +2029,321 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
 
     private int bitField0_;
 
-    private com.google.storage.v2.Object destination_;
+    private java.lang.Object destinationName_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the destination object. Nearly any sequence of unicode
+     * characters is valid. See
+     * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+     * Example: `test.txt`
+     * The `name` field by itself does not uniquely identify a Cloud Storage
+     * object. A Cloud Storage object is uniquely identified by the tuple of
+     * (bucket, object, generation).
+     * </pre>
+     *
+     * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
+     *
+     * @return The destinationName.
+     */
+    public java.lang.String getDestinationName() {
+      java.lang.Object ref = destinationName_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        destinationName_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the destination object. Nearly any sequence of unicode
+     * characters is valid. See
+     * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+     * Example: `test.txt`
+     * The `name` field by itself does not uniquely identify a Cloud Storage
+     * object. A Cloud Storage object is uniquely identified by the tuple of
+     * (bucket, object, generation).
+     * </pre>
+     *
+     * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
+     *
+     * @return The bytes for destinationName.
+     */
+    public com.google.protobuf.ByteString getDestinationNameBytes() {
+      java.lang.Object ref = destinationName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        destinationName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the destination object. Nearly any sequence of unicode
+     * characters is valid. See
+     * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+     * Example: `test.txt`
+     * The `name` field by itself does not uniquely identify a Cloud Storage
+     * object. A Cloud Storage object is uniquely identified by the tuple of
+     * (bucket, object, generation).
+     * </pre>
+     *
+     * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
+     *
+     * @param value The destinationName to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDestinationName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      destinationName_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the destination object. Nearly any sequence of unicode
+     * characters is valid. See
+     * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+     * Example: `test.txt`
+     * The `name` field by itself does not uniquely identify a Cloud Storage
+     * object. A Cloud Storage object is uniquely identified by the tuple of
+     * (bucket, object, generation).
+     * </pre>
+     *
+     * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearDestinationName() {
+
+      destinationName_ = getDefaultInstance().getDestinationName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the destination object. Nearly any sequence of unicode
+     * characters is valid. See
+     * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+     * Example: `test.txt`
+     * The `name` field by itself does not uniquely identify a Cloud Storage
+     * object. A Cloud Storage object is uniquely identified by the tuple of
+     * (bucket, object, generation).
+     * </pre>
+     *
+     * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
+     *
+     * @param value The bytes for destinationName to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDestinationNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      destinationName_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object destinationBucket_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the bucket containing The name of the destination object.
+     * </pre>
+     *
+     * <code>
+     * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+     * </code>
+     *
+     * @return The destinationBucket.
+     */
+    public java.lang.String getDestinationBucket() {
+      java.lang.Object ref = destinationBucket_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        destinationBucket_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the bucket containing The name of the destination object.
+     * </pre>
+     *
+     * <code>
+     * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+     * </code>
+     *
+     * @return The bytes for destinationBucket.
+     */
+    public com.google.protobuf.ByteString getDestinationBucketBytes() {
+      java.lang.Object ref = destinationBucket_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        destinationBucket_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the bucket containing The name of the destination object.
+     * </pre>
+     *
+     * <code>
+     * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+     * </code>
+     *
+     * @param value The destinationBucket to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDestinationBucket(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      destinationBucket_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the bucket containing The name of the destination object.
+     * </pre>
+     *
+     * <code>
+     * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+     * </code>
+     *
+     * @return This builder for chaining.
+     */
+    public Builder clearDestinationBucket() {
+
+      destinationBucket_ = getDefaultInstance().getDestinationBucket();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Immutable. The name of the bucket containing The name of the destination object.
+     * </pre>
+     *
+     * <code>
+     * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+     * </code>
+     *
+     * @param value The bytes for destinationBucket to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDestinationBucketBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      destinationBucket_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.storage.v2.CustomerEncryption destinationCustomerEncryption_;
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.storage.v2.Object,
-            com.google.storage.v2.Object.Builder,
-            com.google.storage.v2.ObjectOrBuilder>
-        destinationBuilder_;
+            com.google.storage.v2.CustomerEncryption,
+            com.google.storage.v2.CustomerEncryption.Builder,
+            com.google.storage.v2.CustomerEncryptionOrBuilder>
+        destinationCustomerEncryptionBuilder_;
     /**
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      *
-     * @return Whether the destination field is set.
+     * @return Whether the destinationCustomerEncryption field is set.
      */
-    public boolean hasDestination() {
-      return destinationBuilder_ != null || destination_ != null;
+    public boolean hasDestinationCustomerEncryption() {
+      return destinationCustomerEncryptionBuilder_ != null
+          || destinationCustomerEncryption_ != null;
     }
     /**
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      *
-     * @return The destination.
+     * @return The destinationCustomerEncryption.
      */
-    public com.google.storage.v2.Object getDestination() {
-      if (destinationBuilder_ == null) {
-        return destination_ == null
-            ? com.google.storage.v2.Object.getDefaultInstance()
-            : destination_;
+    public com.google.storage.v2.CustomerEncryption getDestinationCustomerEncryption() {
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        return destinationCustomerEncryption_ == null
+            ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
+            : destinationCustomerEncryption_;
       } else {
-        return destinationBuilder_.getMessage();
+        return destinationCustomerEncryptionBuilder_.getMessage();
       }
     }
     /**
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public Builder setDestination(com.google.storage.v2.Object value) {
-      if (destinationBuilder_ == null) {
+    public Builder setDestinationCustomerEncryption(
+        com.google.storage.v2.CustomerEncryption value) {
+      if (destinationCustomerEncryptionBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
         }
-        destination_ = value;
+        destinationCustomerEncryption_ = value;
         onChanged();
       } else {
-        destinationBuilder_.setMessage(value);
+        destinationCustomerEncryptionBuilder_.setMessage(value);
       }
 
       return this;
@@ -1931,18 +2352,19 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public Builder setDestination(com.google.storage.v2.Object.Builder builderForValue) {
-      if (destinationBuilder_ == null) {
-        destination_ = builderForValue.build();
+    public Builder setDestinationCustomerEncryption(
+        com.google.storage.v2.CustomerEncryption.Builder builderForValue) {
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        destinationCustomerEncryption_ = builderForValue.build();
         onChanged();
       } else {
-        destinationBuilder_.setMessage(builderForValue.build());
+        destinationCustomerEncryptionBuilder_.setMessage(builderForValue.build());
       }
 
       return this;
@@ -1951,23 +2373,26 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public Builder mergeDestination(com.google.storage.v2.Object value) {
-      if (destinationBuilder_ == null) {
-        if (destination_ != null) {
-          destination_ =
-              com.google.storage.v2.Object.newBuilder(destination_).mergeFrom(value).buildPartial();
+    public Builder mergeDestinationCustomerEncryption(
+        com.google.storage.v2.CustomerEncryption value) {
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        if (destinationCustomerEncryption_ != null) {
+          destinationCustomerEncryption_ =
+              com.google.storage.v2.CustomerEncryption.newBuilder(destinationCustomerEncryption_)
+                  .mergeFrom(value)
+                  .buildPartial();
         } else {
-          destination_ = value;
+          destinationCustomerEncryption_ = value;
         }
         onChanged();
       } else {
-        destinationBuilder_.mergeFrom(value);
+        destinationCustomerEncryptionBuilder_.mergeFrom(value);
       }
 
       return this;
@@ -1976,19 +2401,19 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public Builder clearDestination() {
-      if (destinationBuilder_ == null) {
-        destination_ = null;
+    public Builder clearDestinationCustomerEncryption() {
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        destinationCustomerEncryption_ = null;
         onChanged();
       } else {
-        destination_ = null;
-        destinationBuilder_ = null;
+        destinationCustomerEncryption_ = null;
+        destinationCustomerEncryptionBuilder_ = null;
       }
 
       return this;
@@ -1997,142 +2422,141 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public com.google.storage.v2.Object.Builder getDestinationBuilder() {
+    public com.google.storage.v2.CustomerEncryption.Builder
+        getDestinationCustomerEncryptionBuilder() {
 
       onChanged();
-      return getDestinationFieldBuilder().getBuilder();
+      return getDestinationCustomerEncryptionFieldBuilder().getBuilder();
     }
     /**
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
-    public com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder() {
-      if (destinationBuilder_ != null) {
-        return destinationBuilder_.getMessageOrBuilder();
+    public com.google.storage.v2.CustomerEncryptionOrBuilder
+        getDestinationCustomerEncryptionOrBuilder() {
+      if (destinationCustomerEncryptionBuilder_ != null) {
+        return destinationCustomerEncryptionBuilder_.getMessageOrBuilder();
       } else {
-        return destination_ == null
-            ? com.google.storage.v2.Object.getDefaultInstance()
-            : destination_;
+        return destinationCustomerEncryption_ == null
+            ? com.google.storage.v2.CustomerEncryption.getDefaultInstance()
+            : destinationCustomerEncryption_;
       }
     }
     /**
      *
      *
      * <pre>
-     * Properties of the destination, post-rewrite object.
-     * Includes bucket name, object name, KMS key.
+     * Metadata of customer-supplied encryption key for the destination object, if
+     * the object is to be encrypted by such a key.
      * </pre>
      *
-     * <code>.google.storage.v2.Object destination = 1;</code>
+     * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
      */
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.storage.v2.Object,
-            com.google.storage.v2.Object.Builder,
-            com.google.storage.v2.ObjectOrBuilder>
-        getDestinationFieldBuilder() {
-      if (destinationBuilder_ == null) {
-        destinationBuilder_ =
+            com.google.storage.v2.CustomerEncryption,
+            com.google.storage.v2.CustomerEncryption.Builder,
+            com.google.storage.v2.CustomerEncryptionOrBuilder>
+        getDestinationCustomerEncryptionFieldBuilder() {
+      if (destinationCustomerEncryptionBuilder_ == null) {
+        destinationCustomerEncryptionBuilder_ =
             new com.google.protobuf.SingleFieldBuilderV3<
-                com.google.storage.v2.Object,
-                com.google.storage.v2.Object.Builder,
-                com.google.storage.v2.ObjectOrBuilder>(
-                getDestination(), getParentForChildren(), isClean());
-        destination_ = null;
+                com.google.storage.v2.CustomerEncryption,
+                com.google.storage.v2.CustomerEncryption.Builder,
+                com.google.storage.v2.CustomerEncryptionOrBuilder>(
+                getDestinationCustomerEncryption(), getParentForChildren(), isClean());
+        destinationCustomerEncryption_ = null;
       }
-      return destinationBuilder_;
+      return destinationCustomerEncryptionBuilder_;
     }
 
-    private com.google.protobuf.FieldMask rewriteMask_;
+    private com.google.storage.v2.Object destination_;
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.protobuf.FieldMask,
-            com.google.protobuf.FieldMask.Builder,
-            com.google.protobuf.FieldMaskOrBuilder>
-        rewriteMaskBuilder_;
+            com.google.storage.v2.Object,
+            com.google.storage.v2.Object.Builder,
+            com.google.storage.v2.ObjectOrBuilder>
+        destinationBuilder_;
     /**
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      *
-     * @return Whether the rewriteMask field is set.
+     * @return Whether the destination field is set.
      */
-    public boolean hasRewriteMask() {
-      return rewriteMaskBuilder_ != null || rewriteMask_ != null;
+    public boolean hasDestination() {
+      return destinationBuilder_ != null || destination_ != null;
     }
     /**
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      *
-     * @return The rewriteMask.
+     * @return The destination.
      */
-    public com.google.protobuf.FieldMask getRewriteMask() {
-      if (rewriteMaskBuilder_ == null) {
-        return rewriteMask_ == null
-            ? com.google.protobuf.FieldMask.getDefaultInstance()
-            : rewriteMask_;
+    public com.google.storage.v2.Object getDestination() {
+      if (destinationBuilder_ == null) {
+        return destination_ == null
+            ? com.google.storage.v2.Object.getDefaultInstance()
+            : destination_;
       } else {
-        return rewriteMaskBuilder_.getMessage();
+        return destinationBuilder_.getMessage();
       }
     }
     /**
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public Builder setRewriteMask(com.google.protobuf.FieldMask value) {
-      if (rewriteMaskBuilder_ == null) {
+    public Builder setDestination(com.google.storage.v2.Object value) {
+      if (destinationBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
         }
-        rewriteMask_ = value;
+        destination_ = value;
         onChanged();
       } else {
-        rewriteMaskBuilder_.setMessage(value);
+        destinationBuilder_.setMessage(value);
       }
 
       return this;
@@ -2141,24 +2565,23 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public Builder setRewriteMask(com.google.protobuf.FieldMask.Builder builderForValue) {
-      if (rewriteMaskBuilder_ == null) {
-        rewriteMask_ = builderForValue.build();
+    public Builder setDestination(com.google.storage.v2.Object.Builder builderForValue) {
+      if (destinationBuilder_ == null) {
+        destination_ = builderForValue.build();
         onChanged();
       } else {
-        rewriteMaskBuilder_.setMessage(builderForValue.build());
+        destinationBuilder_.setMessage(builderForValue.build());
       }
 
       return this;
@@ -2167,31 +2590,28 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public Builder mergeRewriteMask(com.google.protobuf.FieldMask value) {
-      if (rewriteMaskBuilder_ == null) {
-        if (rewriteMask_ != null) {
-          rewriteMask_ =
-              com.google.protobuf.FieldMask.newBuilder(rewriteMask_)
-                  .mergeFrom(value)
-                  .buildPartial();
+    public Builder mergeDestination(com.google.storage.v2.Object value) {
+      if (destinationBuilder_ == null) {
+        if (destination_ != null) {
+          destination_ =
+              com.google.storage.v2.Object.newBuilder(destination_).mergeFrom(value).buildPartial();
         } else {
-          rewriteMask_ = value;
+          destination_ = value;
         }
         onChanged();
       } else {
-        rewriteMaskBuilder_.mergeFrom(value);
+        destinationBuilder_.mergeFrom(value);
       }
 
       return this;
@@ -2200,25 +2620,24 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public Builder clearRewriteMask() {
-      if (rewriteMaskBuilder_ == null) {
-        rewriteMask_ = null;
+    public Builder clearDestination() {
+      if (destinationBuilder_ == null) {
+        destination_ = null;
         onChanged();
       } else {
-        rewriteMask_ = null;
-        rewriteMaskBuilder_ = null;
+        destination_ = null;
+        destinationBuilder_ = null;
       }
 
       return this;
@@ -2227,79 +2646,76 @@ public final class RewriteObjectRequest extends com.google.protobuf.GeneratedMes
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public com.google.protobuf.FieldMask.Builder getRewriteMaskBuilder() {
+    public com.google.storage.v2.Object.Builder getDestinationBuilder() {
 
       onChanged();
-      return getRewriteMaskFieldBuilder().getBuilder();
+      return getDestinationFieldBuilder().getBuilder();
     }
     /**
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
-    public com.google.protobuf.FieldMaskOrBuilder getRewriteMaskOrBuilder() {
-      if (rewriteMaskBuilder_ != null) {
-        return rewriteMaskBuilder_.getMessageOrBuilder();
+    public com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder() {
+      if (destinationBuilder_ != null) {
+        return destinationBuilder_.getMessageOrBuilder();
       } else {
-        return rewriteMask_ == null
-            ? com.google.protobuf.FieldMask.getDefaultInstance()
-            : rewriteMask_;
+        return destination_ == null
+            ? com.google.storage.v2.Object.getDefaultInstance()
+            : destination_;
       }
     }
     /**
      *
      *
      * <pre>
-     * List of fields to be updated in the destination object from `destination`.
-     * If the mask is not present, all fields from the source object will be
-     * copied excepting ACL. If the mask is present but specifies no fields, no
-     * fields will be copied.
-     * Non-ACL metadata not included in the mask will be copied from the source
-     * object.
-     * If not present, all fields from the destination will be set from
-     * `destination`.
+     * Properties of the destination, post-rewrite object.
+     * The `name`, `bucket`, and `customer_encryption` fields must not be
+     * populated (these values are specified in the `destination_name`,
+     * `destination_bucket`, and `destination_customer_encryption` fields).
+     * If `destination` is present it will be used to construct the destination
+     * object's metadata; otherwise the destination object's metadata will be
+     * copied from the source object.
      * </pre>
      *
-     * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+     * <code>.google.storage.v2.Object destination = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilderV3<
-            com.google.protobuf.FieldMask,
-            com.google.protobuf.FieldMask.Builder,
-            com.google.protobuf.FieldMaskOrBuilder>
-        getRewriteMaskFieldBuilder() {
-      if (rewriteMaskBuilder_ == null) {
-        rewriteMaskBuilder_ =
+            com.google.storage.v2.Object,
+            com.google.storage.v2.Object.Builder,
+            com.google.storage.v2.ObjectOrBuilder>
+        getDestinationFieldBuilder() {
+      if (destinationBuilder_ == null) {
+        destinationBuilder_ =
             new com.google.protobuf.SingleFieldBuilderV3<
-                com.google.protobuf.FieldMask,
-                com.google.protobuf.FieldMask.Builder,
-                com.google.protobuf.FieldMaskOrBuilder>(
-                getRewriteMask(), getParentForChildren(), isClean());
-        rewriteMask_ = null;
+                com.google.storage.v2.Object,
+                com.google.storage.v2.Object.Builder,
+                com.google.storage.v2.ObjectOrBuilder>(
+                getDestination(), getParentForChildren(), isClean());
+        destination_ = null;
       }
-      return rewriteMaskBuilder_;
+      return destinationBuilder_;
     }
 
     private java.lang.Object sourceBucket_ = "";
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
index 1f502885..73183221 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/RewriteObjectRequestOrBuilder.java
@@ -27,95 +27,158 @@ public interface RewriteObjectRequestOrBuilder
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the destination object. Nearly any sequence of unicode
+   * characters is valid. See
+   * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+   * Example: `test.txt`
+   * The `name` field by itself does not uniquely identify a Cloud Storage
+   * object. A Cloud Storage object is uniquely identified by the tuple of
+   * (bucket, object, generation).
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
    *
-   * @return Whether the destination field is set.
+   * @return The destinationName.
    */
-  boolean hasDestination();
+  java.lang.String getDestinationName();
   /**
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the destination object. Nearly any sequence of unicode
+   * characters is valid. See
+   * [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+   * Example: `test.txt`
+   * The `name` field by itself does not uniquely identify a Cloud Storage
+   * object. A Cloud Storage object is uniquely identified by the tuple of
+   * (bucket, object, generation).
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>string destination_name = 24 [(.google.api.field_behavior) = IMMUTABLE];</code>
    *
-   * @return The destination.
+   * @return The bytes for destinationName.
    */
-  com.google.storage.v2.Object getDestination();
+  com.google.protobuf.ByteString getDestinationNameBytes();
+
   /**
    *
    *
    * <pre>
-   * Properties of the destination, post-rewrite object.
-   * Includes bucket name, object name, KMS key.
+   * Immutable. The name of the bucket containing The name of the destination object.
    * </pre>
    *
-   * <code>.google.storage.v2.Object destination = 1;</code>
+   * <code>
+   * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+   * </code>
+   *
+   * @return The destinationBucket.
    */
-  com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder();
+  java.lang.String getDestinationBucket();
+  /**
+   *
+   *
+   * <pre>
+   * Immutable. The name of the bucket containing The name of the destination object.
+   * </pre>
+   *
+   * <code>
+   * string destination_bucket = 25 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }
+   * </code>
+   *
+   * @return The bytes for destinationBucket.
+   */
+  com.google.protobuf.ByteString getDestinationBucketBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   *
+   * @return Whether the destinationCustomerEncryption field is set.
+   */
+  boolean hasDestinationCustomerEncryption();
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   *
+   * @return The destinationCustomerEncryption.
+   */
+  com.google.storage.v2.CustomerEncryption getDestinationCustomerEncryption();
+  /**
+   *
+   *
+   * <pre>
+   * Metadata of customer-supplied encryption key for the destination object, if
+   * the object is to be encrypted by such a key.
+   * </pre>
+   *
+   * <code>.google.storage.v2.CustomerEncryption destination_customer_encryption = 26;</code>
+   */
+  com.google.storage.v2.CustomerEncryptionOrBuilder getDestinationCustomerEncryptionOrBuilder();
 
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    *
-   * @return Whether the rewriteMask field is set.
+   * @return Whether the destination field is set.
    */
-  boolean hasRewriteMask();
+  boolean hasDestination();
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    *
-   * @return The rewriteMask.
+   * @return The destination.
    */
-  com.google.protobuf.FieldMask getRewriteMask();
+  com.google.storage.v2.Object getDestination();
   /**
    *
    *
    * <pre>
-   * List of fields to be updated in the destination object from `destination`.
-   * If the mask is not present, all fields from the source object will be
-   * copied excepting ACL. If the mask is present but specifies no fields, no
-   * fields will be copied.
-   * Non-ACL metadata not included in the mask will be copied from the source
-   * object.
-   * If not present, all fields from the destination will be set from
-   * `destination`.
+   * Properties of the destination, post-rewrite object.
+   * The `name`, `bucket`, and `customer_encryption` fields must not be
+   * populated (these values are specified in the `destination_name`,
+   * `destination_bucket`, and `destination_customer_encryption` fields).
+   * If `destination` is present it will be used to construct the destination
+   * object's metadata; otherwise the destination object's metadata will be
+   * copied from the source object.
    * </pre>
    *
-   * <code>.google.protobuf.FieldMask rewrite_mask = 23;</code>
+   * <code>.google.storage.v2.Object destination = 1;</code>
    */
-  com.google.protobuf.FieldMaskOrBuilder getRewriteMaskOrBuilder();
+  com.google.storage.v2.ObjectOrBuilder getDestinationOrBuilder();
 
   /**
    *
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
index 6086a768..75f03b66 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
@@ -280,13 +280,13 @@ public final class StorageProto {
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_google_storage_v2_Notification_CustomAttributesEntry_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
-      internal_static_google_storage_v2_Object_descriptor;
+      internal_static_google_storage_v2_CustomerEncryption_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_google_storage_v2_Object_fieldAccessorTable;
+      internal_static_google_storage_v2_CustomerEncryption_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
-      internal_static_google_storage_v2_Object_CustomerEncryption_descriptor;
+      internal_static_google_storage_v2_Object_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_google_storage_v2_Object_CustomerEncryption_fieldAccessorTable;
+      internal_static_google_storage_v2_Object_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
       internal_static_google_storage_v2_Object_MetadataEntry_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -347,528 +347,532 @@ public final class StorageProto {
           + "storage.v2.CommonRequestParams\0222\n\tread_m"
           + "ask\030\005 \001(\0132\032.google.protobuf.FieldMaskH\002\210"
           + "\001\001B\032\n\030_if_metageneration_matchB\036\n\034_if_me"
-          + "tageneration_not_matchB\014\n\n_read_mask\"\254\002\n"
+          + "tageneration_not_matchB\014\n\n_read_mask\"\261\002\n"
           + "\023CreateBucketRequest\022C\n\006parent\030\001 \001(\tB3\340A"
           + "\002\372A-\n+cloudresourcemanager.googleapis.co"
           + "m/Project\022.\n\006bucket\030\002 \001(\0132\031.google.stora"
-          + "ge.v2.BucketB\003\340A\002\022\021\n\tbucket_id\030\003 \001(\t\022>\n\016"
-          + "predefined_acl\030\004 \001(\0162&.google.storage.v2"
-          + ".PredefinedBucketAcl\022M\n\035predefined_defau"
-          + "lt_object_acl\030\005 \001(\0162&.google.storage.v2."
-          + "PredefinedObjectAcl\"\231\002\n\022ListBucketsReque"
-          + "st\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresourc"
-          + "emanager.googleapis.com/Project\022\021\n\tpage_"
-          + "size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006prefix"
-          + "\030\004 \001(\t\0222\n\tread_mask\030\005 \001(\0132\032.google.proto"
-          + "buf.FieldMaskH\000\210\001\001\022E\n\025common_request_par"
-          + "ams\030\006 \001(\0132&.google.storage.v2.CommonRequ"
-          + "estParamsB\014\n\n_read_mask\"Z\n\023ListBucketsRe"
-          + "sponse\022*\n\007buckets\030\001 \003(\0132\031.google.storage"
-          + ".v2.Bucket\022\027\n\017next_page_token\030\002 \001(\t\"\301\001\n "
-          + "LockBucketRetentionPolicyRequest\0225\n\006buck"
-          + "et\030\001 \001(\tB%\340A\002\372A\037\n\035storage.googleapis.com"
-          + "/Bucket\022\037\n\027if_metageneration_match\030\002 \001(\003"
-          + "\022E\n\025common_request_params\030\003 \001(\0132&.google"
-          + ".storage.v2.CommonRequestParams\"\323\003\n\023Upda"
-          + "teBucketRequest\022)\n\006bucket\030\001 \001(\0132\031.google"
-          + ".storage.v2.Bucket\022$\n\027if_metageneration_"
-          + "match\030\002 \001(\003H\000\210\001\001\022(\n\033if_metageneration_no"
-          + "t_match\030\003 \001(\003H\001\210\001\001\022>\n\016predefined_acl\030\004 \001"
-          + "(\0162&.google.storage.v2.PredefinedBucketA"
-          + "cl\022M\n\035predefined_default_object_acl\030\005 \001("
-          + "\0162&.google.storage.v2.PredefinedObjectAc"
-          + "l\022/\n\013update_mask\030\006 \001(\0132\032.google.protobuf"
-          + ".FieldMask\022E\n\025common_request_params\030\007 \001("
-          + "\0132&.google.storage.v2.CommonRequestParam"
-          + "sB\032\n\030_if_metageneration_matchB\036\n\034_if_met"
-          + "ageneration_not_match\"V\n\031DeleteNotificat"
-          + "ionRequest\0229\n\004name\030\001 \001(\tB+\340A\002\372A%\n#storag"
-          + "e.googleapis.com/Notification\"M\n\026GetNoti"
-          + "ficationRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035s"
-          + "torage.googleapis.com/Bucket\"\216\001\n\031CreateN"
-          + "otificationRequest\0225\n\006parent\030\001 \001(\tB%\340A\002\372"
-          + "A\037\022\035storage.googleapis.com/Bucket\022:\n\014not"
-          + "ification\030\002 \001(\0132\037.google.storage.v2.Noti"
-          + "ficationB\003\340A\002\"x\n\030ListNotificationsReques"
-          + "t\0225\n\006parent\030\001 \001(\tB%\340A\002\372A\037\022\035storage.googl"
-          + "eapis.com/Bucket\022\021\n\tpage_size\030\002 \001(\005\022\022\n\np"
-          + "age_token\030\003 \001(\t\"l\n\031ListNotificationsResp"
-          + "onse\0226\n\rnotifications\030\001 \003(\0132\037.google.sto"
-          + "rage.v2.Notification\022\027\n\017next_page_token\030"
-          + "\002 \001(\t\"\241\006\n\024ComposeObjectRequest\0223\n\013destin"
-          + "ation\030\001 \001(\0132\031.google.storage.v2.ObjectB\003"
-          + "\340A\002\022L\n\016source_objects\030\002 \003(\01324.google.sto"
-          + "rage.v2.ComposeObjectRequest.SourceObjec"
-          + "t\022J\n\032destination_predefined_acl\030\003 \001(\0162&."
-          + "google.storage.v2.PredefinedObjectAcl\022 \n"
-          + "\023if_generation_match\030\004 \001(\003H\000\210\001\001\022$\n\027if_me"
-          + "tageneration_match\030\005 \001(\003H\001\210\001\001\0227\n\007kms_key"
-          + "\030\006 \001(\tB&\372A#\n!cloudkms.googleapis.com/Cry"
-          + "ptoKey\022R\n\034common_object_request_params\030\007"
-          + " \001(\0132,.google.storage.v2.CommonObjectReq"
-          + "uestParams\022E\n\025common_request_params\030\010 \001("
-          + "\0132&.google.storage.v2.CommonRequestParam"
-          + "s\032\351\001\n\014SourceObject\022\014\n\004name\030\001 \001(\t\022\022\n\ngene"
-          + "ration\030\002 \001(\003\022f\n\024object_preconditions\030\003 \001"
-          + "(\0132H.google.storage.v2.ComposeObjectRequ"
-          + "est.SourceObject.ObjectPreconditions\032O\n\023"
-          + "ObjectPreconditions\022 \n\023if_generation_mat"
-          + "ch\030\001 \001(\003H\000\210\001\001B\026\n\024_if_generation_matchB\026\n"
-          + "\024_if_generation_matchB\032\n\030_if_metagenerat"
-          + "ion_match\"\211\004\n\023DeleteObjectRequest\022\023\n\006buc"
-          + "ket\030\001 \001(\tB\003\340A\002\022\023\n\006object\030\002 \001(\tB\003\340A\002\022\021\n\tu"
-          + "pload_id\030\003 \001(\t\022\022\n\ngeneration\030\004 \001(\003\022 \n\023if"
-          + "_generation_match\030\005 \001(\003H\000\210\001\001\022$\n\027if_gener"
-          + "ation_not_match\030\006 \001(\003H\001\210\001\001\022$\n\027if_metagen"
-          + "eration_match\030\007 \001(\003H\002\210\001\001\022(\n\033if_metagener"
-          + "ation_not_match\030\010 \001(\003H\003\210\001\001\022R\n\034common_obj"
-          + "ect_request_params\030\n \001(\0132,.google.storag"
-          + "e.v2.CommonObjectRequestParams\022E\n\025common"
-          + "_request_params\030\013 \001(\0132&.google.storage.v"
-          + "2.CommonRequestParamsB\026\n\024_if_generation_"
-          + "matchB\032\n\030_if_generation_not_matchB\032\n\030_if"
-          + "_metageneration_matchB\036\n\034_if_metagenerat"
-          + "ion_not_match\"\325\004\n\021ReadObjectRequest\022\016\n\006b"
-          + "ucket\030\001 \001(\t\022\016\n\006object\030\002 \001(\t\022\022\n\ngeneratio"
-          + "n\030\003 \001(\003\022\023\n\013read_offset\030\004 \001(\003\022\022\n\nread_lim"
-          + "it\030\005 \001(\003\022 \n\023if_generation_match\030\006 \001(\003H\000\210"
-          + "\001\001\022$\n\027if_generation_not_match\030\007 \001(\003H\001\210\001\001"
-          + "\022$\n\027if_metageneration_match\030\010 \001(\003H\002\210\001\001\022("
-          + "\n\033if_metageneration_not_match\030\t \001(\003H\003\210\001\001"
-          + "\022R\n\034common_object_request_params\030\n \001(\0132,"
-          + ".google.storage.v2.CommonObjectRequestPa"
-          + "rams\022E\n\025common_request_params\030\013 \001(\0132&.go"
-          + "ogle.storage.v2.CommonRequestParams\0222\n\tr"
-          + "ead_mask\030\014 \001(\0132\032.google.protobuf.FieldMa"
-          + "skH\004\210\001\001B\026\n\024_if_generation_matchB\032\n\030_if_g"
-          + "eneration_not_matchB\032\n\030_if_metageneratio"
-          + "n_matchB\036\n\034_if_metageneration_not_matchB"
-          + "\014\n\n_read_mask\"\265\004\n\020GetObjectRequest\022\023\n\006bu"
-          + "cket\030\001 \001(\tB\003\340A\002\022\023\n\006object\030\002 \001(\tB\003\340A\002\022\022\n\n"
-          + "generation\030\003 \001(\003\022 \n\023if_generation_match\030"
-          + "\004 \001(\003H\000\210\001\001\022$\n\027if_generation_not_match\030\005 "
-          + "\001(\003H\001\210\001\001\022$\n\027if_metageneration_match\030\006 \001("
-          + "\003H\002\210\001\001\022(\n\033if_metageneration_not_match\030\007 "
-          + "\001(\003H\003\210\001\001\022R\n\034common_object_request_params"
-          + "\030\010 \001(\0132,.google.storage.v2.CommonObjectR"
-          + "equestParams\022E\n\025common_request_params\030\t "
-          + "\001(\0132&.google.storage.v2.CommonRequestPar"
-          + "ams\0222\n\tread_mask\030\n \001(\0132\032.google.protobuf"
-          + ".FieldMaskH\004\210\001\001B\026\n\024_if_generation_matchB"
-          + "\032\n\030_if_generation_not_matchB\032\n\030_if_metag"
-          + "eneration_matchB\036\n\034_if_metageneration_no"
-          + "t_matchB\014\n\n_read_mask\"\365\001\n\022ReadObjectResp"
-          + "onse\022<\n\020checksummed_data\030\001 \001(\0132\".google."
-          + "storage.v2.ChecksummedData\022<\n\020object_che"
-          + "cksums\030\002 \001(\0132\".google.storage.v2.ObjectC"
-          + "hecksums\0226\n\rcontent_range\030\003 \001(\0132\037.google"
-          + ".storage.v2.ContentRange\022+\n\010metadata\030\004 \001"
-          + "(\0132\031.google.storage.v2.Object\"\206\003\n\017WriteO"
-          + "bjectSpec\022+\n\010resource\030\001 \001(\0132\031.google.sto"
-          + "rage.v2.Object\022>\n\016predefined_acl\030\002 \001(\0162&"
-          + ".google.storage.v2.PredefinedObjectAcl\022 "
-          + "\n\023if_generation_match\030\003 \001(\003H\000\210\001\001\022$\n\027if_g"
-          + "eneration_not_match\030\004 \001(\003H\001\210\001\001\022$\n\027if_met"
-          + "ageneration_match\030\005 \001(\003H\002\210\001\001\022(\n\033if_metag"
-          + "eneration_not_match\030\006 \001(\003H\003\210\001\001B\026\n\024_if_ge"
-          + "neration_matchB\032\n\030_if_generation_not_mat"
-          + "chB\032\n\030_if_metageneration_matchB\036\n\034_if_me"
-          + "tageneration_not_match\"\315\003\n\022WriteObjectRe"
-          + "quest\022\023\n\tupload_id\030\001 \001(\tH\000\022?\n\021write_obje"
-          + "ct_spec\030\002 \001(\0132\".google.storage.v2.WriteO"
-          + "bjectSpecH\000\022\031\n\014write_offset\030\003 \001(\003B\003\340A\002\022>"
-          + "\n\020checksummed_data\030\004 \001(\0132\".google.storag"
-          + "e.v2.ChecksummedDataH\001\022<\n\020object_checksu"
-          + "ms\030\006 \001(\0132\".google.storage.v2.ObjectCheck"
-          + "sums\022\024\n\014finish_write\030\007 \001(\010\022R\n\034common_obj"
-          + "ect_request_params\030\010 \001(\0132,.google.storag"
-          + "e.v2.CommonObjectRequestParams\022E\n\025common"
-          + "_request_params\030\t \001(\0132&.google.storage.v"
-          + "2.CommonRequestParamsB\017\n\rfirst_messageB\006"
-          + "\n\004data\"n\n\023WriteObjectResponse\022\030\n\016persist"
-          + "ed_size\030\001 \001(\003H\000\022-\n\010resource\030\002 \001(\0132\031.goog"
-          + "le.storage.v2.ObjectH\000B\016\n\014write_status\"\214"
-          + "\003\n\022ListObjectsRequest\0225\n\006parent\030\001 \001(\tB%\340"
-          + "A\002\372A\037\022\035storage.googleapis.com/Bucket\022\021\n\t"
-          + "page_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\021\n\td"
-          + "elimiter\030\004 \001(\t\022\"\n\032include_trailing_delim"
-          + "iter\030\005 \001(\010\022\016\n\006prefix\030\006 \001(\t\022\020\n\010versions\030\007"
-          + " \001(\010\0222\n\tread_mask\030\010 \001(\0132\032.google.protobu"
-          + "f.FieldMaskH\000\210\001\001\022\033\n\023lexicographic_start\030"
-          + "\n \001(\t\022\031\n\021lexicographic_end\030\013 \001(\t\022E\n\025comm"
-          + "on_request_params\030\t \001(\0132&.google.storage"
-          + ".v2.CommonRequestParamsB\014\n\n_read_mask\"\314\001"
-          + "\n\027QueryWriteStatusRequest\022\026\n\tupload_id\030\001"
-          + " \001(\tB\003\340A\002\022R\n\034common_object_request_param"
-          + "s\030\002 \001(\0132,.google.storage.v2.CommonObject"
-          + "RequestParams\022E\n\025common_request_params\030\003"
-          + " \001(\0132&.google.storage.v2.CommonRequestPa"
-          + "rams\"s\n\030QueryWriteStatusResponse\022\030\n\016pers"
-          + "isted_size\030\001 \001(\003H\000\022-\n\010resource\030\002 \001(\0132\031.g"
-          + "oogle.storage.v2.ObjectH\000B\016\n\014write_statu"
-          + "s\"\274\t\n\024RewriteObjectRequest\022.\n\013destinatio"
-          + "n\030\001 \001(\0132\031.google.storage.v2.Object\0220\n\014re"
-          + "write_mask\030\027 \001(\0132\032.google.protobuf.Field"
-          + "Mask\022\032\n\rsource_bucket\030\002 \001(\tB\003\340A\002\022\032\n\rsour"
-          + "ce_object\030\003 \001(\tB\003\340A\002\022\031\n\021source_generatio"
-          + "n\030\004 \001(\003\022\025\n\rrewrite_token\030\005 \001(\t\022J\n\032destin"
-          + "ation_predefined_acl\030\006 \001(\0162&.google.stor"
-          + "age.v2.PredefinedObjectAcl\022 \n\023if_generat"
-          + "ion_match\030\007 \001(\003H\000\210\001\001\022$\n\027if_generation_no"
-          + "t_match\030\010 \001(\003H\001\210\001\001\022$\n\027if_metageneration_"
-          + "match\030\t \001(\003H\002\210\001\001\022(\n\033if_metageneration_no"
-          + "t_match\030\n \001(\003H\003\210\001\001\022\'\n\032if_source_generati"
-          + "on_match\030\013 \001(\003H\004\210\001\001\022+\n\036if_source_generat"
-          + "ion_not_match\030\014 \001(\003H\005\210\001\001\022+\n\036if_source_me"
-          + "tageneration_match\030\r \001(\003H\006\210\001\001\022/\n\"if_sour"
-          + "ce_metageneration_not_match\030\016 \001(\003H\007\210\001\001\022$"
-          + "\n\034max_bytes_rewritten_per_call\030\017 \001(\003\022(\n "
-          + "copy_source_encryption_algorithm\030\020 \001(\t\022("
-          + "\n copy_source_encryption_key_bytes\030\025 \001(\014"
-          + "\022/\n\'copy_source_encryption_key_sha256_by"
-          + "tes\030\026 \001(\014\022R\n\034common_object_request_param"
-          + "s\030\023 \001(\0132,.google.storage.v2.CommonObject"
-          + "RequestParams\022E\n\025common_request_params\030\024"
-          + " \001(\0132&.google.storage.v2.CommonRequestPa"
-          + "ramsB\026\n\024_if_generation_matchB\032\n\030_if_gene"
-          + "ration_not_matchB\032\n\030_if_metageneration_m"
-          + "atchB\036\n\034_if_metageneration_not_matchB\035\n\033"
-          + "_if_source_generation_matchB!\n\037_if_sourc"
-          + "e_generation_not_matchB!\n\037_if_source_met"
-          + "ageneration_matchB%\n#_if_source_metagene"
-          + "ration_not_match\"\227\001\n\017RewriteResponse\022\035\n\025"
-          + "total_bytes_rewritten\030\001 \001(\003\022\023\n\013object_si"
-          + "ze\030\002 \001(\003\022\014\n\004done\030\003 \001(\010\022\025\n\rrewrite_token\030"
-          + "\004 \001(\t\022+\n\010resource\030\005 \001(\0132\031.google.storage"
-          + ".v2.Object\"\366\001\n\032StartResumableWriteReques"
-          + "t\022=\n\021write_object_spec\030\001 \001(\0132\".google.st"
-          + "orage.v2.WriteObjectSpec\022R\n\034common_objec"
-          + "t_request_params\030\003 \001(\0132,.google.storage."
-          + "v2.CommonObjectRequestParams\022E\n\025common_r"
-          + "equest_params\030\004 \001(\0132&.google.storage.v2."
-          + "CommonRequestParams\"0\n\033StartResumableWri"
-          + "teResponse\022\021\n\tupload_id\030\001 \001(\t\"\324\004\n\023Update"
-          + "ObjectRequest\022)\n\006object\030\001 \001(\0132\031.google.s"
-          + "torage.v2.Object\022 \n\023if_generation_match\030"
-          + "\002 \001(\003H\000\210\001\001\022$\n\027if_generation_not_match\030\003 "
-          + "\001(\003H\001\210\001\001\022$\n\027if_metageneration_match\030\004 \001("
-          + "\003H\002\210\001\001\022(\n\033if_metageneration_not_match\030\005 "
-          + "\001(\003H\003\210\001\001\022>\n\016predefined_acl\030\006 \001(\0162&.googl"
-          + "e.storage.v2.PredefinedObjectAcl\022/\n\013upda"
-          + "te_mask\030\007 \001(\0132\032.google.protobuf.FieldMas"
-          + "k\022R\n\034common_object_request_params\030\010 \001(\0132"
-          + ",.google.storage.v2.CommonObjectRequestP"
-          + "arams\022E\n\025common_request_params\030\t \001(\0132&.g"
-          + "oogle.storage.v2.CommonRequestParamsB\026\n\024"
-          + "_if_generation_matchB\032\n\030_if_generation_n"
-          + "ot_matchB\032\n\030_if_metageneration_matchB\036\n\034"
-          + "_if_metageneration_not_match\"\247\001\n\030GetServ"
-          + "iceAccountRequest\022D\n\007project\030\001 \001(\tB3\340A\002\372"
-          + "A-\n+cloudresourcemanager.googleapis.com/"
-          + "Project\022E\n\025common_request_params\030\002 \001(\0132&"
-          + ".google.storage.v2.CommonRequestParams\"\307"
-          + "\001\n\024CreateHmacKeyRequest\022D\n\007project\030\001 \001(\t"
-          + "B3\340A\002\372A-\n+cloudresourcemanager.googleapi"
-          + "s.com/Project\022\"\n\025service_account_email\030\002"
-          + " \001(\tB\003\340A\002\022E\n\025common_request_params\030\003 \001(\013"
-          + "2&.google.storage.v2.CommonRequestParams"
-          + "\"g\n\025CreateHmacKeyResponse\0224\n\010metadata\030\001 "
-          + "\001(\0132\".google.storage.v2.HmacKeyMetadata\022"
-          + "\030\n\020secret_key_bytes\030\003 \001(\014\"\273\001\n\024DeleteHmac"
-          + "KeyRequest\022\026\n\taccess_id\030\001 \001(\tB\003\340A\002\022D\n\007pr"
-          + "oject\030\002 \001(\tB3\340A\002\372A-\n+cloudresourcemanage"
-          + "r.googleapis.com/Project\022E\n\025common_reque"
-          + "st_params\030\003 \001(\0132&.google.storage.v2.Comm"
-          + "onRequestParams\"\270\001\n\021GetHmacKeyRequest\022\026\n"
-          + "\taccess_id\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3"
-          + "\340A\002\372A-\n+cloudresourcemanager.googleapis."
-          + "com/Project\022E\n\025common_request_params\030\003 \001"
-          + "(\0132&.google.storage.v2.CommonRequestPara"
-          + "ms\"\234\002\n\023ListHmacKeysRequest\022D\n\007project\030\001 "
-          + "\001(\tB3\340A\002\372A-\n+cloudresourcemanager.google"
-          + "apis.com/Project\022\026\n\tpage_size\030\002 \001(\005B\003\340A\001"
-          + "\022\027\n\npage_token\030\003 \001(\tB\003\340A\001\022\"\n\025service_acc"
-          + "ount_email\030\004 \001(\tB\003\340A\001\022\036\n\021show_deleted_ke"
-          + "ys\030\005 \001(\010B\003\340A\001\022J\n\025common_request_params\030\006"
-          + " \001(\0132&.google.storage.v2.CommonRequestPa"
-          + "ramsB\003\340A\001\"f\n\024ListHmacKeysResponse\0225\n\thma"
-          + "c_keys\030\001 \003(\0132\".google.storage.v2.HmacKey"
-          + "Metadata\022\027\n\017next_page_token\030\002 \001(\t\"\311\001\n\024Up"
-          + "dateHmacKeyRequest\0229\n\010hmac_key\030\001 \001(\0132\".g"
-          + "oogle.storage.v2.HmacKeyMetadataB\003\340A\002\022E\n"
-          + "\025common_request_params\030\002 \001(\0132&.google.st"
-          + "orage.v2.CommonRequestParams\022/\n\013update_m"
-          + "ask\030\003 \001(\0132\032.google.protobuf.FieldMask\"|\n"
-          + "\031CommonObjectRequestParams\022\034\n\024encryption"
-          + "_algorithm\030\001 \001(\t\022\034\n\024encryption_key_bytes"
-          + "\030\004 \001(\014\022#\n\033encryption_key_sha256_bytes\030\005 "
-          + "\001(\014\"`\n\023CommonRequestParams\022I\n\014user_proje"
-          + "ct\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemanager.g"
-          + "oogleapis.com/Project\"\312\005\n\020ServiceConstan"
-          + "ts\"\265\005\n\006Values\022\026\n\022VALUES_UNSPECIFIED\020\000\022\033\n"
-          + "\024MAX_READ_CHUNK_BYTES\020\200\200\200\001\022\034\n\025MAX_WRITE_"
-          + "CHUNK_BYTES\020\200\200\200\001\022\031\n\022MAX_OBJECT_SIZE_MB\020\200"
-          + "\200\300\002\022)\n$MAX_CUSTOM_METADATA_FIELD_NAME_BY"
-          + "TES\020\200\010\022*\n%MAX_CUSTOM_METADATA_FIELD_VALU"
-          + "E_BYTES\020\200 \022)\n$MAX_CUSTOM_METADATA_TOTAL_"
-          + "SIZE_BYTES\020\200@\022*\n$MAX_BUCKET_METADATA_TOT"
-          + "AL_SIZE_BYTES\020\200\240\001\022\'\n#MAX_NOTIFICATION_CO"
-          + "NFIGS_PER_BUCKET\020d\022\"\n\036MAX_LIFECYCLE_RULE"
-          + "S_PER_BUCKET\020d\022&\n\"MAX_NOTIFICATION_CUSTO"
-          + "M_ATTRIBUTES\020\005\0221\n,MAX_NOTIFICATION_CUSTO"
-          + "M_ATTRIBUTE_KEY_LENGTH\020\200\002\0223\n.MAX_NOTIFIC"
-          + "ATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH\020\200\010\022\034"
-          + "\n\030MAX_LABELS_ENTRIES_COUNT\020@\022\037\n\033MAX_LABE"
-          + "LS_KEY_VALUE_LENGTH\020?\022\037\n\032MAX_LABELS_KEY_"
-          + "VALUE_BYTES\020\200\001\022.\n)MAX_OBJECT_IDS_PER_DEL"
-          + "ETE_OBJECTS_REQUEST\020\350\007\022\036\n\032SPLIT_TOKEN_MA"
-          + "X_VALID_DAYS\020\016\032\002\020\001\"\207\027\n\006Bucket\022\021\n\004name\030\001 "
-          + "\001(\tB\003\340A\005\022\026\n\tbucket_id\030\002 \001(\tB\003\340A\003\022D\n\007proj"
-          + "ect\030\003 \001(\tB3\340A\005\372A-\n+cloudresourcemanager."
-          + "googleapis.com/Project\022\033\n\016metageneration"
-          + "\030\004 \001(\003B\003\340A\003\022\025\n\010location\030\005 \001(\tB\003\340A\005\022\032\n\rlo"
-          + "cation_type\030\006 \001(\tB\003\340A\003\022\025\n\rstorage_class\030"
-          + "\007 \001(\t\022\013\n\003rpo\030\033 \001(\t\0223\n\003acl\030\010 \003(\0132&.google"
-          + ".storage.v2.BucketAccessControl\022B\n\022defau"
-          + "lt_object_acl\030\t \003(\0132&.google.storage.v2."
-          + "ObjectAccessControl\0226\n\tlifecycle\030\n \001(\0132#"
-          + ".google.storage.v2.Bucket.Lifecycle\0224\n\013c"
-          + "reate_time\030\013 \001(\0132\032.google.protobuf.Times"
-          + "tampB\003\340A\003\022,\n\004cors\030\014 \003(\0132\036.google.storage"
-          + ".v2.Bucket.Cors\0224\n\013update_time\030\r \001(\0132\032.g"
-          + "oogle.protobuf.TimestampB\003\340A\003\022 \n\030default"
-          + "_event_based_hold\030\016 \001(\010\0225\n\006labels\030\017 \003(\0132"
-          + "%.google.storage.v2.Bucket.LabelsEntry\0222"
-          + "\n\007website\030\020 \001(\0132!.google.storage.v2.Buck"
-          + "et.Website\0228\n\nversioning\030\021 \001(\0132$.google."
-          + "storage.v2.Bucket.Versioning\0222\n\007logging\030"
-          + "\022 \001(\0132!.google.storage.v2.Bucket.Logging"
-          + "\022,\n\005owner\030\023 \001(\0132\030.google.storage.v2.Owne"
-          + "rB\003\340A\003\0228\n\nencryption\030\024 \001(\0132$.google.stor"
-          + "age.v2.Bucket.Encryption\0222\n\007billing\030\025 \001("
-          + "\0132!.google.storage.v2.Bucket.Billing\022C\n\020"
-          + "retention_policy\030\026 \001(\0132).google.storage."
-          + "v2.Bucket.RetentionPolicy\0227\n\niam_config\030"
-          + "\027 \001(\0132#.google.storage.v2.Bucket.IamConf"
-          + "ig\022\025\n\rsatisfies_pzs\030\031 \001(\010\022P\n\027custom_plac"
-          + "ement_config\030\032 \001(\0132/.google.storage.v2.B"
-          + "ucket.CustomPlacementConfig\032!\n\007Billing\022\026"
-          + "\n\016requester_pays\030\001 \001(\010\032X\n\004Cors\022\016\n\006origin"
-          + "\030\001 \003(\t\022\016\n\006method\030\002 \003(\t\022\027\n\017response_heade"
-          + "r\030\003 \003(\t\022\027\n\017max_age_seconds\030\004 \001(\005\032M\n\nEncr"
-          + "yption\022?\n\017default_kms_key\030\001 \001(\tB&\372A#\n!cl"
-          + "oudkms.googleapis.com/CryptoKey\032\211\003\n\tIamC"
-          + "onfig\022a\n\033uniform_bucket_level_access\030\001 \001"
-          + "(\0132<.google.storage.v2.Bucket.IamConfig."
-          + "UniformBucketLevelAccess\022\\\n\030public_acces"
-          + "s_prevention\030\002 \001(\0162:.google.storage.v2.B"
-          + "ucket.IamConfig.PublicAccessPrevention\032Z"
-          + "\n\030UniformBucketLevelAccess\022\017\n\007enabled\030\001 "
-          + "\001(\010\022-\n\tlock_time\030\002 \001(\0132\032.google.protobuf"
-          + ".Timestamp\"_\n\026PublicAccessPrevention\022(\n$"
-          + "PUBLIC_ACCESS_PREVENTION_UNSPECIFIED\020\000\022\014"
-          + "\n\010ENFORCED\020\001\022\r\n\tINHERITED\020\002\032\303\005\n\tLifecycl"
-          + "e\0226\n\004rule\030\001 \003(\0132(.google.storage.v2.Buck"
-          + "et.Lifecycle.Rule\032\375\004\n\004Rule\022?\n\006action\030\001 \001"
-          + "(\0132/.google.storage.v2.Bucket.Lifecycle."
-          + "Rule.Action\022E\n\tcondition\030\002 \001(\01322.google."
-          + "storage.v2.Bucket.Lifecycle.Rule.Conditi"
-          + "on\032-\n\006Action\022\014\n\004type\030\001 \001(\t\022\025\n\rstorage_cl"
-          + "ass\030\002 \001(\t\032\275\003\n\tCondition\022\025\n\010age_days\030\001 \001("
-          + "\005H\000\210\001\001\022)\n\016created_before\030\002 \001(\0132\021.google."
-          + "type.Date\022\024\n\007is_live\030\003 \001(\010H\001\210\001\001\022\037\n\022num_n"
-          + "ewer_versions\030\004 \001(\005H\002\210\001\001\022\035\n\025matches_stor"
-          + "age_class\030\005 \003(\t\022#\n\026days_since_custom_tim"
-          + "e\030\007 \001(\005H\003\210\001\001\022-\n\022custom_time_before\030\010 \001(\013"
-          + "2\021.google.type.Date\022\'\n\032days_since_noncur"
-          + "rent_time\030\t \001(\005H\004\210\001\001\0221\n\026noncurrent_time_"
-          + "before\030\n \001(\0132\021.google.type.DateB\013\n\t_age_"
-          + "daysB\n\n\010_is_liveB\025\n\023_num_newer_versionsB"
-          + "\031\n\027_days_since_custom_timeB\035\n\033_days_sinc"
-          + "e_noncurrent_time\0328\n\007Logging\022\022\n\nlog_buck"
-          + "et\030\001 \001(\t\022\031\n\021log_object_prefix\030\002 \001(\t\032r\n\017R"
-          + "etentionPolicy\0222\n\016effective_time\030\001 \001(\0132\032"
-          + ".google.protobuf.Timestamp\022\021\n\tis_locked\030"
-          + "\002 \001(\010\022\030\n\020retention_period\030\003 \001(\003\032\035\n\nVersi"
-          + "oning\022\017\n\007enabled\030\001 \001(\010\032;\n\007Website\022\030\n\020mai"
-          + "n_page_suffix\030\001 \001(\t\022\026\n\016not_found_page\030\002 "
-          + "\001(\t\032/\n\025CustomPlacementConfig\022\026\n\016data_loc"
-          + "ations\030\001 \003(\t\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t"
-          + "\022\r\n\005value\030\002 \001(\t:\0028\001:G\352AD\n\035storage.google"
-          + "apis.com/Bucket\022#projects/{project}/buck"
-          + "ets/{bucket}\"\247\001\n\023BucketAccessControl\022\014\n\004"
-          + "role\030\001 \001(\t\022\n\n\002id\030\002 \001(\t\022\016\n\006entity\030\003 \001(\t\022\021"
-          + "\n\tentity_id\030\004 \001(\t\022\r\n\005email\030\005 \001(\t\022\016\n\006doma"
-          + "in\030\006 \001(\t\0224\n\014project_team\030\007 \001(\0132\036.google."
-          + "storage.v2.ProjectTeam\"B\n\017ChecksummedDat"
-          + "a\022\017\n\007content\030\001 \001(\014\022\023\n\006crc32c\030\002 \001(\007H\000\210\001\001B"
-          + "\t\n\007_crc32c\"C\n\017ObjectChecksums\022\023\n\006crc32c\030"
-          + "\001 \001(\007H\000\210\001\001\022\020\n\010md5_hash\030\002 \001(\014B\t\n\007_crc32c\""
-          + "\203\002\n\017HmacKeyMetadata\022\n\n\002id\030\001 \001(\t\022\021\n\tacces"
-          + "s_id\030\002 \001(\t\022A\n\007project\030\003 \001(\tB0\372A-\n+cloudr"
-          + "esourcemanager.googleapis.com/Project\022\035\n"
-          + "\025service_account_email\030\004 \001(\t\022\r\n\005state\030\005 "
-          + "\001(\t\022/\n\013create_time\030\006 \001(\0132\032.google.protob"
-          + "uf.Timestamp\022/\n\013update_time\030\007 \001(\0132\032.goog"
-          + "le.protobuf.Timestamp\"\217\003\n\014Notification\022\021"
-          + "\n\004name\030\001 \001(\tB\003\340A\002\022\022\n\005topic\030\002 \001(\tB\003\340A\002\022\030\n"
-          + "\013event_types\030\003 \003(\tB\003\340A\001\022U\n\021custom_attrib"
-          + "utes\030\004 \003(\01325.google.storage.v2.Notificat"
-          + "ion.CustomAttributesEntryB\003\340A\001\022\037\n\022object"
-          + "_name_prefix\030\005 \001(\tB\003\340A\001\022\033\n\016payload_forma"
-          + "t\030\006 \001(\tB\003\340A\002\0327\n\025CustomAttributesEntry\022\013\n"
-          + "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:p\352Am\n#stor"
-          + "age.googleapis.com/Notification\022Fproject"
-          + "s/{project}/buckets/{bucket}/notificatio"
-          + "nConfigs/{notification}\"\311\t\n\006Object\022\021\n\004na"
-          + "me\030\001 \001(\tB\003\340A\005\0225\n\006bucket\030\002 \001(\tB%\340A\005\372A\037\n\035s"
-          + "torage.googleapis.com/Bucket\022\027\n\ngenerati"
-          + "on\030\003 \001(\003B\003\340A\005\022\033\n\016metageneration\030\004 \001(\003B\003\340",
-      "A\003\022\025\n\rstorage_class\030\005 \001(\t\022\021\n\004size\030\006 \001(\003B"
-          + "\003\340A\003\022\030\n\020content_encoding\030\007 \001(\t\022\033\n\023conten"
-          + "t_disposition\030\010 \001(\t\022\025\n\rcache_control\030\t \001"
-          + "(\t\0223\n\003acl\030\n \003(\0132&.google.storage.v2.Obje"
-          + "ctAccessControl\022\030\n\020content_language\030\013 \001("
-          + "\t\0224\n\013delete_time\030\014 \001(\0132\032.google.protobuf"
-          + ".TimestampB\003\340A\003\022\024\n\014content_type\030\r \001(\t\0224\n"
-          + "\013create_time\030\016 \001(\0132\032.google.protobuf.Tim"
-          + "estampB\003\340A\003\022\034\n\017component_count\030\017 \001(\005B\003\340A"
-          + "\003\022:\n\tchecksums\030\020 \001(\0132\".google.storage.v2"
-          + ".ObjectChecksumsB\003\340A\003\0224\n\013update_time\030\021 \001"
-          + "(\0132\032.google.protobuf.TimestampB\003\340A\003\0227\n\007k"
-          + "ms_key\030\022 \001(\tB&\372A#\n!cloudkms.googleapis.c"
-          + "om/CryptoKey\022B\n\031update_storage_class_tim"
-          + "e\030\023 \001(\0132\032.google.protobuf.TimestampB\003\340A\003"
-          + "\022\026\n\016temporary_hold\030\024 \001(\010\0229\n\025retention_ex"
-          + "pire_time\030\025 \001(\0132\032.google.protobuf.Timest"
-          + "amp\0229\n\010metadata\030\026 \003(\0132\'.google.storage.v"
-          + "2.Object.MetadataEntry\022\035\n\020event_based_ho"
-          + "ld\030\027 \001(\010H\000\210\001\001\022,\n\005owner\030\030 \001(\0132\030.google.st"
-          + "orage.v2.OwnerB\003\340A\003\022I\n\023customer_encrypti"
-          + "on\030\031 \001(\0132,.google.storage.v2.Object.Cust"
-          + "omerEncryption\022/\n\013custom_time\030\032 \001(\0132\032.go"
-          + "ogle.protobuf.Timestamp\032L\n\022CustomerEncry"
-          + "ption\022\034\n\024encryption_algorithm\030\001 \001(\t\022\030\n\020k"
-          + "ey_sha256_bytes\030\003 \001(\014\032/\n\rMetadataEntry\022\013"
-          + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\023\n\021_event"
-          + "_based_hold\"\247\001\n\023ObjectAccessControl\022\014\n\004r"
-          + "ole\030\001 \001(\t\022\n\n\002id\030\002 \001(\t\022\016\n\006entity\030\003 \001(\t\022\021\n"
-          + "\tentity_id\030\004 \001(\t\022\r\n\005email\030\005 \001(\t\022\016\n\006domai"
-          + "n\030\006 \001(\t\0224\n\014project_team\030\007 \001(\0132\036.google.s"
-          + "torage.v2.ProjectTeam\"l\n\023ListObjectsResp"
-          + "onse\022*\n\007objects\030\001 \003(\0132\031.google.storage.v"
-          + "2.Object\022\020\n\010prefixes\030\002 \003(\t\022\027\n\017next_page_"
-          + "token\030\003 \001(\t\"3\n\013ProjectTeam\022\026\n\016project_nu"
-          + "mber\030\001 \001(\t\022\014\n\004team\030\002 \001(\t\"\'\n\016ServiceAccou"
-          + "nt\022\025\n\remail_address\030\001 \001(\t\"*\n\005Owner\022\016\n\006en"
-          + "tity\030\001 \001(\t\022\021\n\tentity_id\030\002 \001(\t\"C\n\014Content"
-          + "Range\022\r\n\005start\030\001 \001(\003\022\013\n\003end\030\002 \001(\003\022\027\n\017com"
-          + "plete_length\030\003 \001(\003*\377\001\n\023PredefinedObjectA"
-          + "cl\022%\n!PREDEFINED_OBJECT_ACL_UNSPECIFIED\020"
-          + "\000\022!\n\035OBJECT_ACL_AUTHENTICATED_READ\020\001\022(\n$"
-          + "OBJECT_ACL_BUCKET_OWNER_FULL_CONTROL\020\002\022 "
-          + "\n\034OBJECT_ACL_BUCKET_OWNER_READ\020\003\022\026\n\022OBJE"
-          + "CT_ACL_PRIVATE\020\004\022\036\n\032OBJECT_ACL_PROJECT_P"
-          + "RIVATE\020\005\022\032\n\026OBJECT_ACL_PUBLIC_READ\020\006*\325\001\n"
-          + "\023PredefinedBucketAcl\022%\n!PREDEFINED_BUCKE"
-          + "T_ACL_UNSPECIFIED\020\000\022!\n\035BUCKET_ACL_AUTHEN"
-          + "TICATED_READ\020\001\022\026\n\022BUCKET_ACL_PRIVATE\020\002\022\036"
-          + "\n\032BUCKET_ACL_PROJECT_PRIVATE\020\003\022\032\n\026BUCKET"
-          + "_ACL_PUBLIC_READ\020\004\022 \n\034BUCKET_ACL_PUBLIC_"
-          + "READ_WRITE\020\0052\260\033\n\007Storage\022W\n\014DeleteBucket"
-          + "\022&.google.storage.v2.DeleteBucketRequest"
-          + "\032\026.google.protobuf.Empty\"\007\332A\004name\022T\n\tGet"
-          + "Bucket\022#.google.storage.v2.GetBucketRequ"
-          + "est\032\031.google.storage.v2.Bucket\"\007\332A\004name\022"
-          + "m\n\014CreateBucket\022&.google.storage.v2.Crea"
-          + "teBucketRequest\032\031.google.storage.v2.Buck"
-          + "et\"\032\332A\027parent,bucket,bucket_id\022g\n\013ListBu"
-          + "ckets\022%.google.storage.v2.ListBucketsReq"
-          + "uest\032&.google.storage.v2.ListBucketsResp"
-          + "onse\"\t\332A\006parent\022v\n\031LockBucketRetentionPo"
-          + "licy\0223.google.storage.v2.LockBucketReten"
-          + "tionPolicyRequest\032\031.google.storage.v2.Bu"
-          + "cket\"\t\332A\006bucket\022V\n\014GetIamPolicy\022\".google"
-          + ".iam.v1.GetIamPolicyRequest\032\025.google.iam"
-          + ".v1.Policy\"\013\332A\010resource\022]\n\014SetIamPolicy\022"
-          + "\".google.iam.v1.SetIamPolicyRequest\032\025.go"
-          + "ogle.iam.v1.Policy\"\022\332A\017resource,policy\022\202"
-          + "\001\n\022TestIamPermissions\022(.google.iam.v1.Te"
-          + "stIamPermissionsRequest\032).google.iam.v1."
-          + "TestIamPermissionsResponse\"\027\332A\024resource,"
-          + "permissions\022h\n\014UpdateBucket\022&.google.sto"
-          + "rage.v2.UpdateBucketRequest\032\031.google.sto"
-          + "rage.v2.Bucket\"\025\332A\022bucket,update_mask\022c\n"
-          + "\022DeleteNotification\022,.google.storage.v2."
-          + "DeleteNotificationRequest\032\026.google.proto"
-          + "buf.Empty\"\007\332A\004name\022f\n\017GetNotification\022)."
-          + "google.storage.v2.GetNotificationRequest"
-          + "\032\037.google.storage.v2.Notification\"\007\332A\004na"
-          + "me\022{\n\022CreateNotification\022,.google.storag"
-          + "e.v2.CreateNotificationRequest\032\037.google."
-          + "storage.v2.Notification\"\026\332A\023parent,notif"
-          + "ication\022y\n\021ListNotifications\022+.google.st"
-          + "orage.v2.ListNotificationsRequest\032,.goog"
-          + "le.storage.v2.ListNotificationsResponse\""
-          + "\t\332A\006parent\022U\n\rComposeObject\022\'.google.sto"
-          + "rage.v2.ComposeObjectRequest\032\031.google.st"
-          + "orage.v2.Object\"\000\022{\n\014DeleteObject\022&.goog"
-          + "le.storage.v2.DeleteObjectRequest\032\026.goog"
-          + "le.protobuf.Empty\"+\332A\rbucket,object\332A\030bu"
-          + "cket,object,generation\022x\n\tGetObject\022#.go"
-          + "ogle.storage.v2.GetObjectRequest\032\031.googl"
-          + "e.storage.v2.Object\"+\332A\rbucket,object\332A\030"
-          + "bucket,object,generation\022\210\001\n\nReadObject\022"
-          + "$.google.storage.v2.ReadObjectRequest\032%."
-          + "google.storage.v2.ReadObjectResponse\"+\332A"
-          + "\rbucket,object\332A\030bucket,object,generatio"
-          + "n0\001\022h\n\014UpdateObject\022&.google.storage.v2."
-          + "UpdateObjectRequest\032\031.google.storage.v2."
-          + "Object\"\025\332A\022object,update_mask\022`\n\013WriteOb"
-          + "ject\022%.google.storage.v2.WriteObjectRequ"
-          + "est\032&.google.storage.v2.WriteObjectRespo"
-          + "nse\"\000(\001\022g\n\013ListObjects\022%.google.storage."
-          + "v2.ListObjectsRequest\032&.google.storage.v"
-          + "2.ListObjectsResponse\"\t\332A\006parent\022^\n\rRewr"
-          + "iteObject\022\'.google.storage.v2.RewriteObj"
-          + "ectRequest\032\".google.storage.v2.RewriteRe"
-          + "sponse\"\000\022v\n\023StartResumableWrite\022-.google"
-          + ".storage.v2.StartResumableWriteRequest\032."
-          + ".google.storage.v2.StartResumableWriteRe"
-          + "sponse\"\000\022y\n\020QueryWriteStatus\022*.google.st"
-          + "orage.v2.QueryWriteStatusRequest\032+.googl"
-          + "e.storage.v2.QueryWriteStatusResponse\"\014\332"
-          + "A\tupload_id\022o\n\021GetServiceAccount\022+.googl"
-          + "e.storage.v2.GetServiceAccountRequest\032!."
-          + "google.storage.v2.ServiceAccount\"\n\332A\007pro"
-          + "ject\022\204\001\n\rCreateHmacKey\022\'.google.storage."
-          + "v2.CreateHmacKeyRequest\032(.google.storage"
-          + ".v2.CreateHmacKeyResponse\" \332A\035project,se"
-          + "rvice_account_email\022f\n\rDeleteHmacKey\022\'.g"
-          + "oogle.storage.v2.DeleteHmacKeyRequest\032\026."
-          + "google.protobuf.Empty\"\024\332A\021access_id,proj"
-          + "ect\022l\n\nGetHmacKey\022$.google.storage.v2.Ge"
-          + "tHmacKeyRequest\032\".google.storage.v2.Hmac"
-          + "KeyMetadata\"\024\332A\021access_id,project\022k\n\014Lis"
-          + "tHmacKeys\022&.google.storage.v2.ListHmacKe"
-          + "ysRequest\032\'.google.storage.v2.ListHmacKe"
-          + "ysResponse\"\n\332A\007project\022u\n\rUpdateHmacKey\022"
-          + "\'.google.storage.v2.UpdateHmacKeyRequest"
-          + "\032\".google.storage.v2.HmacKeyMetadata\"\027\332A"
-          + "\024hmac_key,update_mask\032\247\002\312A\026storage.googl"
-          + "eapis.com\322A\212\002https://www.googleapis.com/"
-          + "auth/cloud-platform,https://www.googleap"
-          + "is.com/auth/cloud-platform.read-only,htt"
+          + "ge.v2.BucketB\003\340A\002\022\026\n\tbucket_id\030\003 \001(\tB\003\340A"
+          + "\002\022>\n\016predefined_acl\030\004 \001(\0162&.google.stora"
+          + "ge.v2.PredefinedBucketAcl\022M\n\035predefined_"
+          + "default_object_acl\030\005 \001(\0162&.google.storag"
+          + "e.v2.PredefinedObjectAcl\"\231\002\n\022ListBuckets"
+          + "Request\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudre"
+          + "sourcemanager.googleapis.com/Project\022\021\n\t"
+          + "page_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006p"
+          + "refix\030\004 \001(\t\0222\n\tread_mask\030\005 \001(\0132\032.google."
+          + "protobuf.FieldMaskH\000\210\001\001\022E\n\025common_reques"
+          + "t_params\030\006 \001(\0132&.google.storage.v2.Commo"
+          + "nRequestParamsB\014\n\n_read_mask\"Z\n\023ListBuck"
+          + "etsResponse\022*\n\007buckets\030\001 \003(\0132\031.google.st"
+          + "orage.v2.Bucket\022\027\n\017next_page_token\030\002 \001(\t"
+          + "\"\301\001\n LockBucketRetentionPolicyRequest\0225\n"
+          + "\006bucket\030\001 \001(\tB%\340A\002\372A\037\n\035storage.googleapi"
+          + "s.com/Bucket\022\037\n\027if_metageneration_match\030"
+          + "\002 \001(\003\022E\n\025common_request_params\030\003 \001(\0132&.g"
+          + "oogle.storage.v2.CommonRequestParams\"\323\003\n"
+          + "\023UpdateBucketRequest\022)\n\006bucket\030\001 \001(\0132\031.g"
+          + "oogle.storage.v2.Bucket\022$\n\027if_metagenera"
+          + "tion_match\030\002 \001(\003H\000\210\001\001\022(\n\033if_metagenerati"
+          + "on_not_match\030\003 \001(\003H\001\210\001\001\022>\n\016predefined_ac"
+          + "l\030\004 \001(\0162&.google.storage.v2.PredefinedBu"
+          + "cketAcl\022M\n\035predefined_default_object_acl"
+          + "\030\005 \001(\0162&.google.storage.v2.PredefinedObj"
+          + "ectAcl\022/\n\013update_mask\030\006 \001(\0132\032.google.pro"
+          + "tobuf.FieldMask\022E\n\025common_request_params"
+          + "\030\007 \001(\0132&.google.storage.v2.CommonRequest"
+          + "ParamsB\032\n\030_if_metageneration_matchB\036\n\034_i"
+          + "f_metageneration_not_match\"V\n\031DeleteNoti"
+          + "ficationRequest\0229\n\004name\030\001 \001(\tB+\340A\002\372A%\n#s"
+          + "torage.googleapis.com/Notification\"M\n\026Ge"
+          + "tNotificationRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372"
+          + "A\037\n\035storage.googleapis.com/Bucket\"\216\001\n\031Cr"
+          + "eateNotificationRequest\0225\n\006parent\030\001 \001(\tB"
+          + "%\340A\002\372A\037\022\035storage.googleapis.com/Bucket\022:"
+          + "\n\014notification\030\002 \001(\0132\037.google.storage.v2"
+          + ".NotificationB\003\340A\002\"x\n\030ListNotificationsR"
+          + "equest\0225\n\006parent\030\001 \001(\tB%\340A\002\372A\037\022\035storage."
+          + "googleapis.com/Bucket\022\021\n\tpage_size\030\002 \001(\005"
+          + "\022\022\n\npage_token\030\003 \001(\t\"l\n\031ListNotification"
+          + "sResponse\0226\n\rnotifications\030\001 \003(\0132\037.googl"
+          + "e.storage.v2.Notification\022\027\n\017next_page_t"
+          + "oken\030\002 \001(\t\"\246\006\n\024ComposeObjectRequest\0223\n\013d"
+          + "estination\030\001 \001(\0132\031.google.storage.v2.Obj"
+          + "ectB\003\340A\002\022L\n\016source_objects\030\002 \003(\01324.googl"
+          + "e.storage.v2.ComposeObjectRequest.Source"
+          + "Object\022J\n\032destination_predefined_acl\030\003 \001"
+          + "(\0162&.google.storage.v2.PredefinedObjectA"
+          + "cl\022 \n\023if_generation_match\030\004 \001(\003H\000\210\001\001\022$\n\027"
+          + "if_metageneration_match\030\005 \001(\003H\001\210\001\001\0227\n\007km"
+          + "s_key\030\006 \001(\tB&\372A#\n!cloudkms.googleapis.co"
+          + "m/CryptoKey\022R\n\034common_object_request_par"
+          + "ams\030\007 \001(\0132,.google.storage.v2.CommonObje"
+          + "ctRequestParams\022E\n\025common_request_params"
+          + "\030\010 \001(\0132&.google.storage.v2.CommonRequest"
+          + "Params\032\356\001\n\014SourceObject\022\021\n\004name\030\001 \001(\tB\003\340"
+          + "A\002\022\022\n\ngeneration\030\002 \001(\003\022f\n\024object_precond"
+          + "itions\030\003 \001(\0132H.google.storage.v2.Compose"
+          + "ObjectRequest.SourceObject.ObjectPrecond"
+          + "itions\032O\n\023ObjectPreconditions\022 \n\023if_gene"
+          + "ration_match\030\001 \001(\003H\000\210\001\001B\026\n\024_if_generatio"
+          + "n_matchB\026\n\024_if_generation_matchB\032\n\030_if_m"
+          + "etageneration_match\"\211\004\n\023DeleteObjectRequ"
+          + "est\022\023\n\006bucket\030\001 \001(\tB\003\340A\002\022\023\n\006object\030\002 \001(\t"
+          + "B\003\340A\002\022\021\n\tupload_id\030\003 \001(\t\022\022\n\ngeneration\030\004"
+          + " \001(\003\022 \n\023if_generation_match\030\005 \001(\003H\000\210\001\001\022$"
+          + "\n\027if_generation_not_match\030\006 \001(\003H\001\210\001\001\022$\n\027"
+          + "if_metageneration_match\030\007 \001(\003H\002\210\001\001\022(\n\033if"
+          + "_metageneration_not_match\030\010 \001(\003H\003\210\001\001\022R\n\034"
+          + "common_object_request_params\030\n \001(\0132,.goo"
+          + "gle.storage.v2.CommonObjectRequestParams"
+          + "\022E\n\025common_request_params\030\013 \001(\0132&.google"
+          + ".storage.v2.CommonRequestParamsB\026\n\024_if_g"
+          + "eneration_matchB\032\n\030_if_generation_not_ma"
+          + "tchB\032\n\030_if_metageneration_matchB\036\n\034_if_m"
+          + "etageneration_not_match\"\325\004\n\021ReadObjectRe"
+          + "quest\022\016\n\006bucket\030\001 \001(\t\022\016\n\006object\030\002 \001(\t\022\022\n"
+          + "\ngeneration\030\003 \001(\003\022\023\n\013read_offset\030\004 \001(\003\022\022"
+          + "\n\nread_limit\030\005 \001(\003\022 \n\023if_generation_matc"
+          + "h\030\006 \001(\003H\000\210\001\001\022$\n\027if_generation_not_match\030"
+          + "\007 \001(\003H\001\210\001\001\022$\n\027if_metageneration_match\030\010 "
+          + "\001(\003H\002\210\001\001\022(\n\033if_metageneration_not_match\030"
+          + "\t \001(\003H\003\210\001\001\022R\n\034common_object_request_para"
+          + "ms\030\n \001(\0132,.google.storage.v2.CommonObjec"
+          + "tRequestParams\022E\n\025common_request_params\030"
+          + "\013 \001(\0132&.google.storage.v2.CommonRequestP"
+          + "arams\0222\n\tread_mask\030\014 \001(\0132\032.google.protob"
+          + "uf.FieldMaskH\004\210\001\001B\026\n\024_if_generation_matc"
+          + "hB\032\n\030_if_generation_not_matchB\032\n\030_if_met"
+          + "ageneration_matchB\036\n\034_if_metageneration_"
+          + "not_matchB\014\n\n_read_mask\"\265\004\n\020GetObjectReq"
+          + "uest\022\023\n\006bucket\030\001 \001(\tB\003\340A\002\022\023\n\006object\030\002 \001("
+          + "\tB\003\340A\002\022\022\n\ngeneration\030\003 \001(\003\022 \n\023if_generat"
+          + "ion_match\030\004 \001(\003H\000\210\001\001\022$\n\027if_generation_no"
+          + "t_match\030\005 \001(\003H\001\210\001\001\022$\n\027if_metageneration_"
+          + "match\030\006 \001(\003H\002\210\001\001\022(\n\033if_metageneration_no"
+          + "t_match\030\007 \001(\003H\003\210\001\001\022R\n\034common_object_requ"
+          + "est_params\030\010 \001(\0132,.google.storage.v2.Com"
+          + "monObjectRequestParams\022E\n\025common_request"
+          + "_params\030\t \001(\0132&.google.storage.v2.Common"
+          + "RequestParams\0222\n\tread_mask\030\n \001(\0132\032.googl"
+          + "e.protobuf.FieldMaskH\004\210\001\001B\026\n\024_if_generat"
+          + "ion_matchB\032\n\030_if_generation_not_matchB\032\n"
+          + "\030_if_metageneration_matchB\036\n\034_if_metagen"
+          + "eration_not_matchB\014\n\n_read_mask\"\365\001\n\022Read"
+          + "ObjectResponse\022<\n\020checksummed_data\030\001 \001(\013"
+          + "2\".google.storage.v2.ChecksummedData\022<\n\020"
+          + "object_checksums\030\002 \001(\0132\".google.storage."
+          + "v2.ObjectChecksums\0226\n\rcontent_range\030\003 \001("
+          + "\0132\037.google.storage.v2.ContentRange\022+\n\010me"
+          + "tadata\030\004 \001(\0132\031.google.storage.v2.Object\""
+          + "\206\003\n\017WriteObjectSpec\022+\n\010resource\030\001 \001(\0132\031."
+          + "google.storage.v2.Object\022>\n\016predefined_a"
+          + "cl\030\002 \001(\0162&.google.storage.v2.PredefinedO"
+          + "bjectAcl\022 \n\023if_generation_match\030\003 \001(\003H\000\210"
+          + "\001\001\022$\n\027if_generation_not_match\030\004 \001(\003H\001\210\001\001"
+          + "\022$\n\027if_metageneration_match\030\005 \001(\003H\002\210\001\001\022("
+          + "\n\033if_metageneration_not_match\030\006 \001(\003H\003\210\001\001"
+          + "B\026\n\024_if_generation_matchB\032\n\030_if_generati"
+          + "on_not_matchB\032\n\030_if_metageneration_match"
+          + "B\036\n\034_if_metageneration_not_match\"\315\003\n\022Wri"
+          + "teObjectRequest\022\023\n\tupload_id\030\001 \001(\tH\000\022?\n\021"
+          + "write_object_spec\030\002 \001(\0132\".google.storage"
+          + ".v2.WriteObjectSpecH\000\022\031\n\014write_offset\030\003 "
+          + "\001(\003B\003\340A\002\022>\n\020checksummed_data\030\004 \001(\0132\".goo"
+          + "gle.storage.v2.ChecksummedDataH\001\022<\n\020obje"
+          + "ct_checksums\030\006 \001(\0132\".google.storage.v2.O"
+          + "bjectChecksums\022\024\n\014finish_write\030\007 \001(\010\022R\n\034"
+          + "common_object_request_params\030\010 \001(\0132,.goo"
+          + "gle.storage.v2.CommonObjectRequestParams"
+          + "\022E\n\025common_request_params\030\t \001(\0132&.google"
+          + ".storage.v2.CommonRequestParamsB\017\n\rfirst"
+          + "_messageB\006\n\004data\"n\n\023WriteObjectResponse\022"
+          + "\030\n\016persisted_size\030\001 \001(\003H\000\022-\n\010resource\030\002 "
+          + "\001(\0132\031.google.storage.v2.ObjectH\000B\016\n\014writ"
+          + "e_status\"\214\003\n\022ListObjectsRequest\0225\n\006paren"
+          + "t\030\001 \001(\tB%\340A\002\372A\037\022\035storage.googleapis.com/"
+          + "Bucket\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030"
+          + "\003 \001(\t\022\021\n\tdelimiter\030\004 \001(\t\022\"\n\032include_trai"
+          + "ling_delimiter\030\005 \001(\010\022\016\n\006prefix\030\006 \001(\t\022\020\n\010"
+          + "versions\030\007 \001(\010\0222\n\tread_mask\030\010 \001(\0132\032.goog"
+          + "le.protobuf.FieldMaskH\000\210\001\001\022\033\n\023lexicograp"
+          + "hic_start\030\n \001(\t\022\031\n\021lexicographic_end\030\013 \001"
+          + "(\t\022E\n\025common_request_params\030\t \001(\0132&.goog"
+          + "le.storage.v2.CommonRequestParamsB\014\n\n_re"
+          + "ad_mask\"\314\001\n\027QueryWriteStatusRequest\022\026\n\tu"
+          + "pload_id\030\001 \001(\tB\003\340A\002\022R\n\034common_object_req"
+          + "uest_params\030\002 \001(\0132,.google.storage.v2.Co"
+          + "mmonObjectRequestParams\022E\n\025common_reques"
+          + "t_params\030\003 \001(\0132&.google.storage.v2.Commo"
+          + "nRequestParams\"s\n\030QueryWriteStatusRespon"
+          + "se\022\030\n\016persisted_size\030\001 \001(\003H\000\022-\n\010resource"
+          + "\030\002 \001(\0132\031.google.storage.v2.ObjectH\000B\016\n\014w"
+          + "rite_status\"\274\n\n\024RewriteObjectRequest\022\035\n\020"
+          + "destination_name\030\030 \001(\tB\003\340A\005\022A\n\022destinati"
+          + "on_bucket\030\031 \001(\tB%\340A\005\372A\037\n\035storage.googlea"
+          + "pis.com/Bucket\022N\n\037destination_customer_e"
+          + "ncryption\030\032 \001(\0132%.google.storage.v2.Cust"
+          + "omerEncryption\022.\n\013destination\030\001 \001(\0132\031.go"
+          + "ogle.storage.v2.Object\022\032\n\rsource_bucket\030"
+          + "\002 \001(\tB\003\340A\002\022\032\n\rsource_object\030\003 \001(\tB\003\340A\002\022\031"
+          + "\n\021source_generation\030\004 \001(\003\022\025\n\rrewrite_tok"
+          + "en\030\005 \001(\t\022J\n\032destination_predefined_acl\030\006"
+          + " \001(\0162&.google.storage.v2.PredefinedObjec"
+          + "tAcl\022 \n\023if_generation_match\030\007 \001(\003H\000\210\001\001\022$"
+          + "\n\027if_generation_not_match\030\010 \001(\003H\001\210\001\001\022$\n\027"
+          + "if_metageneration_match\030\t \001(\003H\002\210\001\001\022(\n\033if"
+          + "_metageneration_not_match\030\n \001(\003H\003\210\001\001\022\'\n\032"
+          + "if_source_generation_match\030\013 \001(\003H\004\210\001\001\022+\n"
+          + "\036if_source_generation_not_match\030\014 \001(\003H\005\210"
+          + "\001\001\022+\n\036if_source_metageneration_match\030\r \001"
+          + "(\003H\006\210\001\001\022/\n\"if_source_metageneration_not_"
+          + "match\030\016 \001(\003H\007\210\001\001\022$\n\034max_bytes_rewritten_"
+          + "per_call\030\017 \001(\003\022(\n copy_source_encryption"
+          + "_algorithm\030\020 \001(\t\022(\n copy_source_encrypti"
+          + "on_key_bytes\030\025 \001(\014\022/\n\'copy_source_encryp"
+          + "tion_key_sha256_bytes\030\026 \001(\014\022R\n\034common_ob"
+          + "ject_request_params\030\023 \001(\0132,.google.stora"
+          + "ge.v2.CommonObjectRequestParams\022E\n\025commo"
+          + "n_request_params\030\024 \001(\0132&.google.storage."
+          + "v2.CommonRequestParamsB\026\n\024_if_generation"
+          + "_matchB\032\n\030_if_generation_not_matchB\032\n\030_i"
+          + "f_metageneration_matchB\036\n\034_if_metagenera"
+          + "tion_not_matchB\035\n\033_if_source_generation_"
+          + "matchB!\n\037_if_source_generation_not_match"
+          + "B!\n\037_if_source_metageneration_matchB%\n#_"
+          + "if_source_metageneration_not_match\"\227\001\n\017R"
+          + "ewriteResponse\022\035\n\025total_bytes_rewritten\030"
+          + "\001 \001(\003\022\023\n\013object_size\030\002 \001(\003\022\014\n\004done\030\003 \001(\010"
+          + "\022\025\n\rrewrite_token\030\004 \001(\t\022+\n\010resource\030\005 \001("
+          + "\0132\031.google.storage.v2.Object\"\366\001\n\032StartRe"
+          + "sumableWriteRequest\022=\n\021write_object_spec"
+          + "\030\001 \001(\0132\".google.storage.v2.WriteObjectSp"
+          + "ec\022R\n\034common_object_request_params\030\003 \001(\013"
+          + "2,.google.storage.v2.CommonObjectRequest"
+          + "Params\022E\n\025common_request_params\030\004 \001(\0132&."
+          + "google.storage.v2.CommonRequestParams\"0\n"
+          + "\033StartResumableWriteResponse\022\021\n\tupload_i"
+          + "d\030\001 \001(\t\"\324\004\n\023UpdateObjectRequest\022)\n\006objec"
+          + "t\030\001 \001(\0132\031.google.storage.v2.Object\022 \n\023if"
+          + "_generation_match\030\002 \001(\003H\000\210\001\001\022$\n\027if_gener"
+          + "ation_not_match\030\003 \001(\003H\001\210\001\001\022$\n\027if_metagen"
+          + "eration_match\030\004 \001(\003H\002\210\001\001\022(\n\033if_metagener"
+          + "ation_not_match\030\005 \001(\003H\003\210\001\001\022>\n\016predefined"
+          + "_acl\030\006 \001(\0162&.google.storage.v2.Predefine"
+          + "dObjectAcl\022/\n\013update_mask\030\007 \001(\0132\032.google"
+          + ".protobuf.FieldMask\022R\n\034common_object_req"
+          + "uest_params\030\010 \001(\0132,.google.storage.v2.Co"
+          + "mmonObjectRequestParams\022E\n\025common_reques"
+          + "t_params\030\t \001(\0132&.google.storage.v2.Commo"
+          + "nRequestParamsB\026\n\024_if_generation_matchB\032"
+          + "\n\030_if_generation_not_matchB\032\n\030_if_metage"
+          + "neration_matchB\036\n\034_if_metageneration_not"
+          + "_match\"\247\001\n\030GetServiceAccountRequest\022D\n\007p"
+          + "roject\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemanag"
+          + "er.googleapis.com/Project\022E\n\025common_requ"
+          + "est_params\030\002 \001(\0132&.google.storage.v2.Com"
+          + "monRequestParams\"\307\001\n\024CreateHmacKeyReques"
+          + "t\022D\n\007project\030\001 \001(\tB3\340A\002\372A-\n+cloudresourc"
+          + "emanager.googleapis.com/Project\022\"\n\025servi"
+          + "ce_account_email\030\002 \001(\tB\003\340A\002\022E\n\025common_re"
+          + "quest_params\030\003 \001(\0132&.google.storage.v2.C"
+          + "ommonRequestParams\"g\n\025CreateHmacKeyRespo"
+          + "nse\0224\n\010metadata\030\001 \001(\0132\".google.storage.v"
+          + "2.HmacKeyMetadata\022\030\n\020secret_key_bytes\030\003 "
+          + "\001(\014\"\273\001\n\024DeleteHmacKeyRequest\022\026\n\taccess_i"
+          + "d\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3\340A\002\372A-\n+c"
+          + "loudresourcemanager.googleapis.com/Proje"
+          + "ct\022E\n\025common_request_params\030\003 \001(\0132&.goog"
+          + "le.storage.v2.CommonRequestParams\"\270\001\n\021Ge"
+          + "tHmacKeyRequest\022\026\n\taccess_id\030\001 \001(\tB\003\340A\002\022"
+          + "D\n\007project\030\002 \001(\tB3\340A\002\372A-\n+cloudresourcem"
+          + "anager.googleapis.com/Project\022E\n\025common_"
+          + "request_params\030\003 \001(\0132&.google.storage.v2"
+          + ".CommonRequestParams\"\234\002\n\023ListHmacKeysReq"
+          + "uest\022D\n\007project\030\001 \001(\tB3\340A\002\372A-\n+cloudreso"
+          + "urcemanager.googleapis.com/Project\022\026\n\tpa"
+          + "ge_size\030\002 \001(\005B\003\340A\001\022\027\n\npage_token\030\003 \001(\tB\003"
+          + "\340A\001\022\"\n\025service_account_email\030\004 \001(\tB\003\340A\001\022"
+          + "\036\n\021show_deleted_keys\030\005 \001(\010B\003\340A\001\022J\n\025commo"
+          + "n_request_params\030\006 \001(\0132&.google.storage."
+          + "v2.CommonRequestParamsB\003\340A\001\"f\n\024ListHmacK"
+          + "eysResponse\0225\n\thmac_keys\030\001 \003(\0132\".google."
+          + "storage.v2.HmacKeyMetadata\022\027\n\017next_page_"
+          + "token\030\002 \001(\t\"\311\001\n\024UpdateHmacKeyRequest\0229\n\010"
+          + "hmac_key\030\001 \001(\0132\".google.storage.v2.HmacK"
+          + "eyMetadataB\003\340A\002\022E\n\025common_request_params"
+          + "\030\002 \001(\0132&.google.storage.v2.CommonRequest"
+          + "Params\022/\n\013update_mask\030\003 \001(\0132\032.google.pro"
+          + "tobuf.FieldMask\"|\n\031CommonObjectRequestPa"
+          + "rams\022\034\n\024encryption_algorithm\030\001 \001(\t\022\034\n\024en"
+          + "cryption_key_bytes\030\004 \001(\014\022#\n\033encryption_k"
+          + "ey_sha256_bytes\030\005 \001(\014\"`\n\023CommonRequestPa"
+          + "rams\022I\n\014user_project\030\001 \001(\tB3\340A\002\372A-\n+clou"
+          + "dresourcemanager.googleapis.com/Project\""
+          + "\312\005\n\020ServiceConstants\"\265\005\n\006Values\022\026\n\022VALUE"
+          + "S_UNSPECIFIED\020\000\022\033\n\024MAX_READ_CHUNK_BYTES\020"
+          + "\200\200\200\001\022\034\n\025MAX_WRITE_CHUNK_BYTES\020\200\200\200\001\022\031\n\022MA"
+          + "X_OBJECT_SIZE_MB\020\200\200\300\002\022)\n$MAX_CUSTOM_META"
+          + "DATA_FIELD_NAME_BYTES\020\200\010\022*\n%MAX_CUSTOM_M"
+          + "ETADATA_FIELD_VALUE_BYTES\020\200 \022)\n$MAX_CUST"
+          + "OM_METADATA_TOTAL_SIZE_BYTES\020\200@\022*\n$MAX_B"
+          + "UCKET_METADATA_TOTAL_SIZE_BYTES\020\200\240\001\022\'\n#M"
+          + "AX_NOTIFICATION_CONFIGS_PER_BUCKET\020d\022\"\n\036"
+          + "MAX_LIFECYCLE_RULES_PER_BUCKET\020d\022&\n\"MAX_"
+          + "NOTIFICATION_CUSTOM_ATTRIBUTES\020\005\0221\n,MAX_"
+          + "NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH"
+          + "\020\200\002\0223\n.MAX_NOTIFICATION_CUSTOM_ATTRIBUTE"
+          + "_VALUE_LENGTH\020\200\010\022\034\n\030MAX_LABELS_ENTRIES_C"
+          + "OUNT\020@\022\037\n\033MAX_LABELS_KEY_VALUE_LENGTH\020?\022"
+          + "\037\n\032MAX_LABELS_KEY_VALUE_BYTES\020\200\001\022.\n)MAX_"
+          + "OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST\020\350\007"
+          + "\022\036\n\032SPLIT_TOKEN_MAX_VALID_DAYS\020\016\032\002\020\001\"\207\027\n"
+          + "\006Bucket\022\021\n\004name\030\001 \001(\tB\003\340A\005\022\026\n\tbucket_id\030"
+          + "\002 \001(\tB\003\340A\003\022D\n\007project\030\003 \001(\tB3\340A\005\372A-\n+clo"
+          + "udresourcemanager.googleapis.com/Project"
+          + "\022\033\n\016metageneration\030\004 \001(\003B\003\340A\003\022\025\n\010locatio"
+          + "n\030\005 \001(\tB\003\340A\005\022\032\n\rlocation_type\030\006 \001(\tB\003\340A\003"
+          + "\022\025\n\rstorage_class\030\007 \001(\t\022\013\n\003rpo\030\033 \001(\t\0223\n\003"
+          + "acl\030\010 \003(\0132&.google.storage.v2.BucketAcce"
+          + "ssControl\022B\n\022default_object_acl\030\t \003(\0132&."
+          + "google.storage.v2.ObjectAccessControl\0226\n"
+          + "\tlifecycle\030\n \001(\0132#.google.storage.v2.Buc"
+          + "ket.Lifecycle\0224\n\013create_time\030\013 \001(\0132\032.goo"
+          + "gle.protobuf.TimestampB\003\340A\003\022,\n\004cors\030\014 \003("
+          + "\0132\036.google.storage.v2.Bucket.Cors\0224\n\013upd"
+          + "ate_time\030\r \001(\0132\032.google.protobuf.Timesta"
+          + "mpB\003\340A\003\022 \n\030default_event_based_hold\030\016 \001("
+          + "\010\0225\n\006labels\030\017 \003(\0132%.google.storage.v2.Bu"
+          + "cket.LabelsEntry\0222\n\007website\030\020 \001(\0132!.goog"
+          + "le.storage.v2.Bucket.Website\0228\n\nversioni"
+          + "ng\030\021 \001(\0132$.google.storage.v2.Bucket.Vers"
+          + "ioning\0222\n\007logging\030\022 \001(\0132!.google.storage"
+          + ".v2.Bucket.Logging\022,\n\005owner\030\023 \001(\0132\030.goog"
+          + "le.storage.v2.OwnerB\003\340A\003\0228\n\nencryption\030\024"
+          + " \001(\0132$.google.storage.v2.Bucket.Encrypti"
+          + "on\0222\n\007billing\030\025 \001(\0132!.google.storage.v2."
+          + "Bucket.Billing\022C\n\020retention_policy\030\026 \001(\013"
+          + "2).google.storage.v2.Bucket.RetentionPol"
+          + "icy\0227\n\niam_config\030\027 \001(\0132#.google.storage"
+          + ".v2.Bucket.IamConfig\022\025\n\rsatisfies_pzs\030\031 "
+          + "\001(\010\022P\n\027custom_placement_config\030\032 \001(\0132/.g"
+          + "oogle.storage.v2.Bucket.CustomPlacementC"
+          + "onfig\032!\n\007Billing\022\026\n\016requester_pays\030\001 \001(\010"
+          + "\032X\n\004Cors\022\016\n\006origin\030\001 \003(\t\022\016\n\006method\030\002 \003(\t"
+          + "\022\027\n\017response_header\030\003 \003(\t\022\027\n\017max_age_sec"
+          + "onds\030\004 \001(\005\032M\n\nEncryption\022?\n\017default_kms_"
+          + "key\030\001 \001(\tB&\372A#\n!cloudkms.googleapis.com/"
+          + "CryptoKey\032\211\003\n\tIamConfig\022a\n\033uniform_bucke"
+          + "t_level_access\030\001 \001(\0132<.google.storage.v2"
+          + ".Bucket.IamConfig.UniformBucketLevelAcce"
+          + "ss\022\\\n\030public_access_prevention\030\002 \001(\0162:.g"
+          + "oogle.storage.v2.Bucket.IamConfig.Public"
+          + "AccessPrevention\032Z\n\030UniformBucketLevelAc"
+          + "cess\022\017\n\007enabled\030\001 \001(\010\022-\n\tlock_time\030\002 \001(\013"
+          + "2\032.google.protobuf.Timestamp\"_\n\026PublicAc"
+          + "cessPrevention\022(\n$PUBLIC_ACCESS_PREVENTI"
+          + "ON_UNSPECIFIED\020\000\022\014\n\010ENFORCED\020\001\022\r\n\tINHERI"
+          + "TED\020\002\032\303\005\n\tLifecycle\0226\n\004rule\030\001 \003(\0132(.goog"
+          + "le.storage.v2.Bucket.Lifecycle.Rule\032\375\004\n\004"
+          + "Rule\022?\n\006action\030\001 \001(\0132/.google.storage.v2"
+          + ".Bucket.Lifecycle.Rule.Action\022E\n\tconditi"
+          + "on\030\002 \001(\01322.google.storage.v2.Bucket.Life"
+          + "cycle.Rule.Condition\032-\n\006Action\022\014\n\004type\030\001"
+          + " \001(\t\022\025\n\rstorage_class\030\002 \001(\t\032\275\003\n\tConditio"
+          + "n\022\025\n\010age_days\030\001 \001(\005H\000\210\001\001\022)\n\016created_befo"
+          + "re\030\002 \001(\0132\021.google.type.Date\022\024\n\007is_live\030\003"
+          + " \001(\010H\001\210\001\001\022\037\n\022num_newer_versions\030\004 \001(\005H\002\210"
+          + "\001\001\022\035\n\025matches_storage_class\030\005 \003(\t\022#\n\026day"
+          + "s_since_custom_time\030\007 \001(\005H\003\210\001\001\022-\n\022custom"
+          + "_time_before\030\010 \001(\0132\021.google.type.Date\022\'\n"
+          + "\032days_since_noncurrent_time\030\t \001(\005H\004\210\001\001\0221"
+          + "\n\026noncurrent_time_before\030\n \001(\0132\021.google."
+          + "type.DateB\013\n\t_age_daysB\n\n\010_is_liveB\025\n\023_n"
+          + "um_newer_versionsB\031\n\027_days_since_custom_"
+          + "timeB\035\n\033_days_since_noncurrent_time\0328\n\007L"
+          + "ogging\022\022\n\nlog_bucket\030\001 \001(\t\022\031\n\021log_object"
+          + "_prefix\030\002 \001(\t\032r\n\017RetentionPolicy\0222\n\016effe"
+          + "ctive_time\030\001 \001(\0132\032.google.protobuf.Times"
+          + "tamp\022\021\n\tis_locked\030\002 \001(\010\022\030\n\020retention_per"
+          + "iod\030\003 \001(\003\032\035\n\nVersioning\022\017\n\007enabled\030\001 \001(\010"
+          + "\032;\n\007Website\022\030\n\020main_page_suffix\030\001 \001(\t\022\026\n"
+          + "\016not_found_page\030\002 \001(\t\032/\n\025CustomPlacement"
+          + "Config\022\026\n\016data_locations\030\001 \003(\t\032-\n\013Labels"
+          + "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:G\352"
+          + "AD\n\035storage.googleapis.com/Bucket\022#proje"
+          + "cts/{project}/buckets/{bucket}\"\247\001\n\023Bucke"
+          + "tAccessControl\022\014\n\004role\030\001 \001(\t\022\n\n\002id\030\002 \001(\t"
+          + "\022\016\n\006entity\030\003 \001(\t\022\021\n\tentity_id\030\004 \001(\t\022\r\n\005e"
+          + "mail\030\005 \001(\t\022\016\n\006domain\030\006 \001(\t\0224\n\014project_te"
+          + "am\030\007 \001(\0132\036.google.storage.v2.ProjectTeam"
+          + "\"B\n\017ChecksummedData\022\017\n\007content\030\001 \001(\014\022\023\n\006"
+          + "crc32c\030\002 \001(\007H\000\210\001\001B\t\n\007_crc32c\"C\n\017ObjectCh"
+          + "ecksums\022\023\n\006crc32c\030\001 \001(\007H\000\210\001\001\022\020\n\010md5_hash"
+          + "\030\002 \001(\014B\t\n\007_crc32c\"\203\002\n\017HmacKeyMetadata\022\n\n"
+          + "\002id\030\001 \001(\t\022\021\n\taccess_id\030\002 \001(\t\022A\n\007project\030"
+          + "\003 \001(\tB0\372A-\n+cloudresourcemanager.googlea"
+          + "pis.com/Project\022\035\n\025service_account_email"
+          + "\030\004 \001(\t\022\r\n\005state\030\005 \001(\t\022/\n\013create_time\030\006 \001"
+          + "(\0132\032.google.protobuf.Timestamp\022/\n\013update"
+          + "_time\030\007 \001(\0132\032.google.protobuf.Timestamp\""
+          + "\217\003\n\014Notification\022\021\n\004name\030\001 \001(\tB\003\340A\002\022\022\n\005t"
+          + "opic\030\002 \001(\tB\003\340A\002\022\030\n\013event_types\030\003 \003(\tB\003\340A"
+          + "\001\022U\n\021custom_attributes\030\004 \003(\01325.google.st"
+          + "orage.v2.Notification.CustomAttributesEn"
+          + "tryB\003\340A\001\022\037\n\022object_name_prefix\030\005 \001(\tB\003\340A"
+          + "\001\022\033\n\016payload_format\030\006 \001(\tB\003\340A\002\0327\n\025Custom"
+          + "AttributesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
+          + "\001(\t:\0028\001:p\352Am\n#storage.googleapis.com/Not"
+          + "ification\022Fprojects/{project}/buckets/{b"
+          + "ucket}/notificationConfigs/{notification",
+      "}\"L\n\022CustomerEncryption\022\034\n\024encryption_al"
+          + "gorithm\030\001 \001(\t\022\030\n\020key_sha256_bytes\030\003 \001(\014\""
+          + "\364\010\n\006Object\022\021\n\004name\030\001 \001(\tB\003\340A\005\0225\n\006bucket\030"
+          + "\002 \001(\tB%\340A\005\372A\037\n\035storage.googleapis.com/Bu"
+          + "cket\022\027\n\ngeneration\030\003 \001(\003B\003\340A\005\022\033\n\016metagen"
+          + "eration\030\004 \001(\003B\003\340A\003\022\025\n\rstorage_class\030\005 \001("
+          + "\t\022\021\n\004size\030\006 \001(\003B\003\340A\003\022\030\n\020content_encoding"
+          + "\030\007 \001(\t\022\033\n\023content_disposition\030\010 \001(\t\022\025\n\rc"
+          + "ache_control\030\t \001(\t\0223\n\003acl\030\n \003(\0132&.google"
+          + ".storage.v2.ObjectAccessControl\022\030\n\020conte"
+          + "nt_language\030\013 \001(\t\0224\n\013delete_time\030\014 \001(\0132\032"
+          + ".google.protobuf.TimestampB\003\340A\003\022\024\n\014conte"
+          + "nt_type\030\r \001(\t\0224\n\013create_time\030\016 \001(\0132\032.goo"
+          + "gle.protobuf.TimestampB\003\340A\003\022\034\n\017component"
+          + "_count\030\017 \001(\005B\003\340A\003\022:\n\tchecksums\030\020 \001(\0132\".g"
+          + "oogle.storage.v2.ObjectChecksumsB\003\340A\003\0224\n"
+          + "\013update_time\030\021 \001(\0132\032.google.protobuf.Tim"
+          + "estampB\003\340A\003\0227\n\007kms_key\030\022 \001(\tB&\372A#\n!cloud"
+          + "kms.googleapis.com/CryptoKey\022B\n\031update_s"
+          + "torage_class_time\030\023 \001(\0132\032.google.protobu"
+          + "f.TimestampB\003\340A\003\022\026\n\016temporary_hold\030\024 \001(\010"
+          + "\0229\n\025retention_expire_time\030\025 \001(\0132\032.google"
+          + ".protobuf.Timestamp\0229\n\010metadata\030\026 \003(\0132\'."
+          + "google.storage.v2.Object.MetadataEntry\022\035"
+          + "\n\020event_based_hold\030\027 \001(\010H\000\210\001\001\022,\n\005owner\030\030"
+          + " \001(\0132\030.google.storage.v2.OwnerB\003\340A\003\022B\n\023c"
+          + "ustomer_encryption\030\031 \001(\0132%.google.storag"
+          + "e.v2.CustomerEncryption\022/\n\013custom_time\030\032"
+          + " \001(\0132\032.google.protobuf.Timestamp\032/\n\rMeta"
+          + "dataEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028"
+          + "\001B\023\n\021_event_based_hold\"\247\001\n\023ObjectAccessC"
+          + "ontrol\022\014\n\004role\030\001 \001(\t\022\n\n\002id\030\002 \001(\t\022\016\n\006enti"
+          + "ty\030\003 \001(\t\022\021\n\tentity_id\030\004 \001(\t\022\r\n\005email\030\005 \001"
+          + "(\t\022\016\n\006domain\030\006 \001(\t\0224\n\014project_team\030\007 \001(\013"
+          + "2\036.google.storage.v2.ProjectTeam\"l\n\023List"
+          + "ObjectsResponse\022*\n\007objects\030\001 \003(\0132\031.googl"
+          + "e.storage.v2.Object\022\020\n\010prefixes\030\002 \003(\t\022\027\n"
+          + "\017next_page_token\030\003 \001(\t\"3\n\013ProjectTeam\022\026\n"
+          + "\016project_number\030\001 \001(\t\022\014\n\004team\030\002 \001(\t\"\'\n\016S"
+          + "erviceAccount\022\025\n\remail_address\030\001 \001(\t\"*\n\005"
+          + "Owner\022\016\n\006entity\030\001 \001(\t\022\021\n\tentity_id\030\002 \001(\t"
+          + "\"C\n\014ContentRange\022\r\n\005start\030\001 \001(\003\022\013\n\003end\030\002"
+          + " \001(\003\022\027\n\017complete_length\030\003 \001(\003*\377\001\n\023Predef"
+          + "inedObjectAcl\022%\n!PREDEFINED_OBJECT_ACL_U"
+          + "NSPECIFIED\020\000\022!\n\035OBJECT_ACL_AUTHENTICATED"
+          + "_READ\020\001\022(\n$OBJECT_ACL_BUCKET_OWNER_FULL_"
+          + "CONTROL\020\002\022 \n\034OBJECT_ACL_BUCKET_OWNER_REA"
+          + "D\020\003\022\026\n\022OBJECT_ACL_PRIVATE\020\004\022\036\n\032OBJECT_AC"
+          + "L_PROJECT_PRIVATE\020\005\022\032\n\026OBJECT_ACL_PUBLIC"
+          + "_READ\020\006*\325\001\n\023PredefinedBucketAcl\022%\n!PREDE"
+          + "FINED_BUCKET_ACL_UNSPECIFIED\020\000\022!\n\035BUCKET"
+          + "_ACL_AUTHENTICATED_READ\020\001\022\026\n\022BUCKET_ACL_"
+          + "PRIVATE\020\002\022\036\n\032BUCKET_ACL_PROJECT_PRIVATE\020"
+          + "\003\022\032\n\026BUCKET_ACL_PUBLIC_READ\020\004\022 \n\034BUCKET_"
+          + "ACL_PUBLIC_READ_WRITE\020\0052\260\033\n\007Storage\022W\n\014D"
+          + "eleteBucket\022&.google.storage.v2.DeleteBu"
+          + "cketRequest\032\026.google.protobuf.Empty\"\007\332A\004"
+          + "name\022T\n\tGetBucket\022#.google.storage.v2.Ge"
+          + "tBucketRequest\032\031.google.storage.v2.Bucke"
+          + "t\"\007\332A\004name\022m\n\014CreateBucket\022&.google.stor"
+          + "age.v2.CreateBucketRequest\032\031.google.stor"
+          + "age.v2.Bucket\"\032\332A\027parent,bucket,bucket_i"
+          + "d\022g\n\013ListBuckets\022%.google.storage.v2.Lis"
+          + "tBucketsRequest\032&.google.storage.v2.List"
+          + "BucketsResponse\"\t\332A\006parent\022v\n\031LockBucket"
+          + "RetentionPolicy\0223.google.storage.v2.Lock"
+          + "BucketRetentionPolicyRequest\032\031.google.st"
+          + "orage.v2.Bucket\"\t\332A\006bucket\022V\n\014GetIamPoli"
+          + "cy\022\".google.iam.v1.GetIamPolicyRequest\032\025"
+          + ".google.iam.v1.Policy\"\013\332A\010resource\022]\n\014Se"
+          + "tIamPolicy\022\".google.iam.v1.SetIamPolicyR"
+          + "equest\032\025.google.iam.v1.Policy\"\022\332A\017resour"
+          + "ce,policy\022\202\001\n\022TestIamPermissions\022(.googl"
+          + "e.iam.v1.TestIamPermissionsRequest\032).goo"
+          + "gle.iam.v1.TestIamPermissionsResponse\"\027\332"
+          + "A\024resource,permissions\022h\n\014UpdateBucket\022&"
+          + ".google.storage.v2.UpdateBucketRequest\032\031"
+          + ".google.storage.v2.Bucket\"\025\332A\022bucket,upd"
+          + "ate_mask\022c\n\022DeleteNotification\022,.google."
+          + "storage.v2.DeleteNotificationRequest\032\026.g"
+          + "oogle.protobuf.Empty\"\007\332A\004name\022f\n\017GetNoti"
+          + "fication\022).google.storage.v2.GetNotifica"
+          + "tionRequest\032\037.google.storage.v2.Notifica"
+          + "tion\"\007\332A\004name\022{\n\022CreateNotification\022,.go"
+          + "ogle.storage.v2.CreateNotificationReques"
+          + "t\032\037.google.storage.v2.Notification\"\026\332A\023p"
+          + "arent,notification\022y\n\021ListNotifications\022"
+          + "+.google.storage.v2.ListNotificationsReq"
+          + "uest\032,.google.storage.v2.ListNotificatio"
+          + "nsResponse\"\t\332A\006parent\022U\n\rComposeObject\022\'"
+          + ".google.storage.v2.ComposeObjectRequest\032"
+          + "\031.google.storage.v2.Object\"\000\022{\n\014DeleteOb"
+          + "ject\022&.google.storage.v2.DeleteObjectReq"
+          + "uest\032\026.google.protobuf.Empty\"+\332A\rbucket,"
+          + "object\332A\030bucket,object,generation\022x\n\tGet"
+          + "Object\022#.google.storage.v2.GetObjectRequ"
+          + "est\032\031.google.storage.v2.Object\"+\332A\rbucke"
+          + "t,object\332A\030bucket,object,generation\022\210\001\n\n"
+          + "ReadObject\022$.google.storage.v2.ReadObjec"
+          + "tRequest\032%.google.storage.v2.ReadObjectR"
+          + "esponse\"+\332A\rbucket,object\332A\030bucket,objec"
+          + "t,generation0\001\022h\n\014UpdateObject\022&.google."
+          + "storage.v2.UpdateObjectRequest\032\031.google."
+          + "storage.v2.Object\"\025\332A\022object,update_mask"
+          + "\022`\n\013WriteObject\022%.google.storage.v2.Writ"
+          + "eObjectRequest\032&.google.storage.v2.Write"
+          + "ObjectResponse\"\000(\001\022g\n\013ListObjects\022%.goog"
+          + "le.storage.v2.ListObjectsRequest\032&.googl"
+          + "e.storage.v2.ListObjectsResponse\"\t\332A\006par"
+          + "ent\022^\n\rRewriteObject\022\'.google.storage.v2"
+          + ".RewriteObjectRequest\032\".google.storage.v"
+          + "2.RewriteResponse\"\000\022v\n\023StartResumableWri"
+          + "te\022-.google.storage.v2.StartResumableWri"
+          + "teRequest\032..google.storage.v2.StartResum"
+          + "ableWriteResponse\"\000\022y\n\020QueryWriteStatus\022"
+          + "*.google.storage.v2.QueryWriteStatusRequ"
+          + "est\032+.google.storage.v2.QueryWriteStatus"
+          + "Response\"\014\332A\tupload_id\022o\n\021GetServiceAcco"
+          + "unt\022+.google.storage.v2.GetServiceAccoun"
+          + "tRequest\032!.google.storage.v2.ServiceAcco"
+          + "unt\"\n\332A\007project\022\204\001\n\rCreateHmacKey\022\'.goog"
+          + "le.storage.v2.CreateHmacKeyRequest\032(.goo"
+          + "gle.storage.v2.CreateHmacKeyResponse\" \332A"
+          + "\035project,service_account_email\022f\n\rDelete"
+          + "HmacKey\022\'.google.storage.v2.DeleteHmacKe"
+          + "yRequest\032\026.google.protobuf.Empty\"\024\332A\021acc"
+          + "ess_id,project\022l\n\nGetHmacKey\022$.google.st"
+          + "orage.v2.GetHmacKeyRequest\032\".google.stor"
+          + "age.v2.HmacKeyMetadata\"\024\332A\021access_id,pro"
+          + "ject\022k\n\014ListHmacKeys\022&.google.storage.v2"
+          + ".ListHmacKeysRequest\032\'.google.storage.v2"
+          + ".ListHmacKeysResponse\"\n\332A\007project\022u\n\rUpd"
+          + "ateHmacKey\022\'.google.storage.v2.UpdateHma"
+          + "cKeyRequest\032\".google.storage.v2.HmacKeyM"
+          + "etadata\"\027\332A\024hmac_key,update_mask\032\247\002\312A\026st"
+          + "orage.googleapis.com\322A\212\002https://www.goog"
+          + "leapis.com/auth/cloud-platform,https://w"
+          + "ww.googleapis.com/auth/cloud-platform.re"
+          + "ad-only,https://www.googleapis.com/auth/"
+          + "devstorage.full_control,https://www.goog"
+          + "leapis.com/auth/devstorage.read_only,htt"
           + "ps://www.googleapis.com/auth/devstorage."
-          + "full_control,https://www.googleapis.com/"
-          + "auth/devstorage.read_only,https://www.go"
-          + "ogleapis.com/auth/devstorage.read_writeB"
-          + "\334\001\n\025com.google.storage.v2B\014StorageProtoP"
-          + "\001Z8google.golang.org/genproto/googleapis"
-          + "/storage/v2;storage\352Ax\n!cloudkms.googlea"
-          + "pis.com/CryptoKey\022Sprojects/{project}/lo"
-          + "cations/{location}/keyRings/{key_ring}/c"
-          + "ryptoKeys/{crypto_key}b\006proto3"
+          + "read_writeB\334\001\n\025com.google.storage.v2B\014St"
+          + "orageProtoP\001Z8google.golang.org/genproto"
+          + "/googleapis/storage/v2;storage\352Ax\n!cloud"
+          + "kms.googleapis.com/CryptoKey\022Sprojects/{"
+          + "project}/locations/{location}/keyRings/{"
+          + "key_ring}/cryptoKeys/{crypto_key}b\006proto"
+          + "3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -1199,8 +1203,10 @@ public final class StorageProto {
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_RewriteObjectRequest_descriptor,
             new java.lang.String[] {
+              "DestinationName",
+              "DestinationBucket",
+              "DestinationCustomerEncryption",
               "Destination",
-              "RewriteMask",
               "SourceBucket",
               "SourceObject",
               "SourceGeneration",
@@ -1588,7 +1594,15 @@ public final class StorageProto {
             new java.lang.String[] {
               "Key", "Value",
             });
-    internal_static_google_storage_v2_Object_descriptor = getDescriptor().getMessageTypes().get(45);
+    internal_static_google_storage_v2_CustomerEncryption_descriptor =
+        getDescriptor().getMessageTypes().get(45);
+    internal_static_google_storage_v2_CustomerEncryption_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_storage_v2_CustomerEncryption_descriptor,
+            new java.lang.String[] {
+              "EncryptionAlgorithm", "KeySha256Bytes",
+            });
+    internal_static_google_storage_v2_Object_descriptor = getDescriptor().getMessageTypes().get(46);
     internal_static_google_storage_v2_Object_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_Object_descriptor,
@@ -1621,16 +1635,8 @@ public final class StorageProto {
               "CustomTime",
               "EventBasedHold",
             });
-    internal_static_google_storage_v2_Object_CustomerEncryption_descriptor =
-        internal_static_google_storage_v2_Object_descriptor.getNestedTypes().get(0);
-    internal_static_google_storage_v2_Object_CustomerEncryption_fieldAccessorTable =
-        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-            internal_static_google_storage_v2_Object_CustomerEncryption_descriptor,
-            new java.lang.String[] {
-              "EncryptionAlgorithm", "KeySha256Bytes",
-            });
     internal_static_google_storage_v2_Object_MetadataEntry_descriptor =
-        internal_static_google_storage_v2_Object_descriptor.getNestedTypes().get(1);
+        internal_static_google_storage_v2_Object_descriptor.getNestedTypes().get(0);
     internal_static_google_storage_v2_Object_MetadataEntry_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_Object_MetadataEntry_descriptor,
@@ -1638,7 +1644,7 @@ public final class StorageProto {
               "Key", "Value",
             });
     internal_static_google_storage_v2_ObjectAccessControl_descriptor =
-        getDescriptor().getMessageTypes().get(46);
+        getDescriptor().getMessageTypes().get(47);
     internal_static_google_storage_v2_ObjectAccessControl_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_ObjectAccessControl_descriptor,
@@ -1646,7 +1652,7 @@ public final class StorageProto {
               "Role", "Id", "Entity", "EntityId", "Email", "Domain", "ProjectTeam",
             });
     internal_static_google_storage_v2_ListObjectsResponse_descriptor =
-        getDescriptor().getMessageTypes().get(47);
+        getDescriptor().getMessageTypes().get(48);
     internal_static_google_storage_v2_ListObjectsResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_ListObjectsResponse_descriptor,
@@ -1654,7 +1660,7 @@ public final class StorageProto {
               "Objects", "Prefixes", "NextPageToken",
             });
     internal_static_google_storage_v2_ProjectTeam_descriptor =
-        getDescriptor().getMessageTypes().get(48);
+        getDescriptor().getMessageTypes().get(49);
     internal_static_google_storage_v2_ProjectTeam_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_ProjectTeam_descriptor,
@@ -1662,14 +1668,14 @@ public final class StorageProto {
               "ProjectNumber", "Team",
             });
     internal_static_google_storage_v2_ServiceAccount_descriptor =
-        getDescriptor().getMessageTypes().get(49);
+        getDescriptor().getMessageTypes().get(50);
     internal_static_google_storage_v2_ServiceAccount_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_ServiceAccount_descriptor,
             new java.lang.String[] {
               "EmailAddress",
             });
-    internal_static_google_storage_v2_Owner_descriptor = getDescriptor().getMessageTypes().get(50);
+    internal_static_google_storage_v2_Owner_descriptor = getDescriptor().getMessageTypes().get(51);
     internal_static_google_storage_v2_Owner_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_Owner_descriptor,
@@ -1677,7 +1683,7 @@ public final class StorageProto {
               "Entity", "EntityId",
             });
     internal_static_google_storage_v2_ContentRange_descriptor =
-        getDescriptor().getMessageTypes().get(51);
+        getDescriptor().getMessageTypes().get(52);
     internal_static_google_storage_v2_ContentRange_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_storage_v2_ContentRange_descriptor,
diff --git a/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto b/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
index 6c9f8887..9c54a5ca 100644
--- a/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
+++ b/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
@@ -319,10 +319,10 @@ message CreateBucketRequest {
   // the bucket resource.
   Bucket bucket = 2 [(google.api.field_behavior) = REQUIRED];
 
-  // The ID to use for this bucket, which will become the final component of
+  // Required. The ID to use for this bucket, which will become the final component of
   // the bucket's resource name. For example, the value `foo` might result in
   // a bucket with the name `projects/123456/buckets/foo`.
-  string bucket_id = 3;
+  string bucket_id = 3 [(google.api.field_behavior) = REQUIRED];
 
   // Apply a predefined set of access controls to this bucket.
   PredefinedBucketAcl predefined_acl = 4;
@@ -511,9 +511,9 @@ message ComposeObjectRequest {
       optional int64 if_generation_match = 1;
     }
 
-    // The source object's name. All source objects must reside in the same
+    // Required. The source object's name. All source objects must reside in the same
     // bucket.
-    string name = 1;
+    string name = 1 [(google.api.field_behavior) = REQUIRED];
 
     // The generation of this object to use as the source.
     int64 generation = 2;
@@ -924,20 +924,36 @@ message QueryWriteStatusResponse {
 
 // Request message for RewriteObject.
 message RewriteObjectRequest {
+  // Immutable. The name of the destination object. Nearly any sequence of unicode
+  // characters is valid. See
+  // [Guidelines](https://cloud.google.com/storage/docs/naming-objects).
+  // Example: `test.txt`
+  // The `name` field by itself does not uniquely identify a Cloud Storage
+  // object. A Cloud Storage object is uniquely identified by the tuple of
+  // (bucket, object, generation).
+  string destination_name = 24 [(google.api.field_behavior) = IMMUTABLE];
+
+  // Immutable. The name of the bucket containing The name of the destination object.
+  string destination_bucket = 25 [
+    (google.api.field_behavior) = IMMUTABLE,
+    (google.api.resource_reference) = {
+      type: "storage.googleapis.com/Bucket"
+    }
+  ];
+
+  // Metadata of customer-supplied encryption key for the destination object, if
+  // the object is to be encrypted by such a key.
+  CustomerEncryption destination_customer_encryption = 26;
+
   // Properties of the destination, post-rewrite object.
-  // Includes bucket name, object name, KMS key.
+  // The `name`, `bucket`, and `customer_encryption` fields must not be
+  // populated (these values are specified in the `destination_name`,
+  // `destination_bucket`, and `destination_customer_encryption` fields).
+  // If `destination` is present it will be used to construct the destination
+  // object's metadata; otherwise the destination object's metadata will be
+  // copied from the source object.
   Object destination = 1;
 
-  // List of fields to be updated in the destination object from `destination`.
-  // If the mask is not present, all fields from the source object will be
-  // copied excepting ACL. If the mask is present but specifies no fields, no
-  // fields will be copied.
-  // Non-ACL metadata not included in the mask will be copied from the source
-  // object.
-  // If not present, all fields from the destination will be set from
-  // `destination`.
-  google.protobuf.FieldMask rewrite_mask = 23;
-
   // Required. Name of the bucket in which to find the source object.
   string source_bucket = 2 [(google.api.field_behavior) = REQUIRED];
 
@@ -1442,8 +1458,8 @@ message Bucket {
     message Rule {
       // An action to take on an object.
       message Action {
-        // Type of the action. Currently, only `Delete` and
-        // `SetStorageClass` are supported.
+        // Type of the action. Currently, only `Delete`, `SetStorageClass`, and
+        // `AbortIncompleteMultipartUpload` are supported.
         string type = 1;
 
         // Target storage class. Required iff the type of the action is
@@ -1812,8 +1828,8 @@ message Notification {
 
   // Required. The resource name of this notification.
   // Format:
-  // `projects/{project}/buckets/{bucket}/notificationConfigs/{notification` The
-  // `{project}` portion may be `_` for globally unique buckets.
+  // `projects/{project}/buckets/{bucket}/notificationConfigs/{notification}`
+  // The `{project}` portion may be `_` for globally unique buckets.
   string name = 1 [(google.api.field_behavior) = REQUIRED];
 
   // Required. The Pub/Sub topic to which this subscription publishes. Formatted as:
@@ -1836,18 +1852,19 @@ message Notification {
   string payload_format = 6 [(google.api.field_behavior) = REQUIRED];
 }
 
+// Describes the customer-specified mechanism used to store an Object's data at
+// rest.
+message CustomerEncryption {
+  // The encryption algorithm.
+  string encryption_algorithm = 1;
+
+  // SHA256 hash value of the encryption key.
+  // In raw bytes format (not base64-encoded).
+  bytes key_sha256_bytes = 3;
+}
+
 // An object.
 message Object {
-  // Describes the customer-specified mechanism used to store the data at rest.
-  message CustomerEncryption {
-    // The encryption algorithm.
-    string encryption_algorithm = 1;
-
-    // SHA256 hash value of the encryption key.
-    // In raw bytes format (not base64-encoded).
-    bytes key_sha256_bytes = 3;
-  }
-
   // Immutable. The name of this object. Nearly any sequence of unicode characters is
   // valid. See
   // [Guidelines](https://cloud.google.com/storage/docs/naming-objects).


Test patch:
diff --git a/gapic-google-cloud-storage-v2/src/test/java/com/google/storage/v2/StorageClientTest.java b/gapic-google-cloud-storage-v2/src/test/java/com/google/storage/v2/StorageClientTest.java
index fe991b4e..565f82f0 100644
--- a/gapic-google-cloud-storage-v2/src/test/java/com/google/storage/v2/StorageClientTest.java
+++ b/gapic-google-cloud-storage-v2/src/test/java/com/google/storage/v2/StorageClientTest.java
@@ -1328,7 +1328,7 @@ public class StorageClientTest {
             .putAllMetadata(new HashMap<String, String>())
             .setEventBasedHold(true)
             .setOwner(Owner.newBuilder().build())
-            .setCustomerEncryption(Object.CustomerEncryption.newBuilder().build())
+            .setCustomerEncryption(CustomerEncryption.newBuilder().build())
             .setCustomTime(Timestamp.newBuilder().build())
             .build();
     mockStorage.addResponse(expectedResponse);
@@ -1504,7 +1504,7 @@ public class StorageClientTest {
             .putAllMetadata(new HashMap<String, String>())
             .setEventBasedHold(true)
             .setOwner(Owner.newBuilder().build())
-            .setCustomerEncryption(Object.CustomerEncryption.newBuilder().build())
+            .setCustomerEncryption(CustomerEncryption.newBuilder().build())
             .setCustomTime(Timestamp.newBuilder().build())
             .build();
     mockStorage.addResponse(expectedResponse);
@@ -1572,7 +1572,7 @@ public class StorageClientTest {
             .putAllMetadata(new HashMap<String, String>())
             .setEventBasedHold(true)
             .setOwner(Owner.newBuilder().build())
-            .setCustomerEncryption(Object.CustomerEncryption.newBuilder().build())
+            .setCustomerEncryption(CustomerEncryption.newBuilder().build())
             .setCustomTime(Timestamp.newBuilder().build())
             .build();
     mockStorage.addResponse(expectedResponse);
@@ -1716,7 +1716,7 @@ public class StorageClientTest {
             .putAllMetadata(new HashMap<String, String>())
             .setEventBasedHold(true)
             .setOwner(Owner.newBuilder().build())
-            .setCustomerEncryption(Object.CustomerEncryption.newBuilder().build())
+            .setCustomerEncryption(CustomerEncryption.newBuilder().build())
             .setCustomTime(Timestamp.newBuilder().build())
             .build();
     mockStorage.addResponse(expectedResponse);
@@ -1916,8 +1916,10 @@ public class StorageClientTest {
 
     RewriteObjectRequest request =
         RewriteObjectRequest.newBuilder()
+            .setDestinationName("destinationName-1762755655")
+            .setDestinationBucket(BucketName.of("[PROJECT]", "[BUCKET]").toString())
+            .setDestinationCustomerEncryption(CustomerEncryption.newBuilder().build())
             .setDestination(Object.newBuilder().build())
-            .setRewriteMask(FieldMask.newBuilder().build())
             .setSourceBucket("sourceBucket841604581")
             .setSourceObject("sourceObject1196439354")
             .setSourceGeneration(1232209852)
@@ -1946,8 +1948,12 @@ public class StorageClientTest {
     Assert.assertEquals(1, actualRequests.size());
     RewriteObjectRequest actualRequest = ((RewriteObjectRequest) actualRequests.get(0));
 
+    Assert.assertEquals(request.getDestinationName(), actualRequest.getDestinationName());
+    Assert.assertEquals(request.getDestinationBucket(), actualRequest.getDestinationBucket());
+    Assert.assertEquals(
+        request.getDestinationCustomerEncryption(),
+        actualRequest.getDestinationCustomerEncryption());
     Assert.assertEquals(request.getDestination(), actualRequest.getDestination());
-    Assert.assertEquals(request.getRewriteMask(), actualRequest.getRewriteMask());
     Assert.assertEquals(request.getSourceBucket(), actualRequest.getSourceBucket());
     Assert.assertEquals(request.getSourceObject(), actualRequest.getSourceObject());
     Assert.assertEquals(request.getSourceGeneration(), actualRequest.getSourceGeneration());
@@ -1996,8 +2002,10 @@ public class StorageClientTest {
     try {
       RewriteObjectRequest request =
           RewriteObjectRequest.newBuilder()
+              .setDestinationName("destinationName-1762755655")
+              .setDestinationBucket(BucketName.of("[PROJECT]", "[BUCKET]").toString())
+              .setDestinationCustomerEncryption(CustomerEncryption.newBuilder().build())
               .setDestination(Object.newBuilder().build())
-              .setRewriteMask(FieldMask.newBuilder().build())
               .setSourceBucket("sourceBucket841604581")
               .setSourceObject("sourceObject1196439354")
               .setSourceGeneration(1232209852)