Release v1.6.0 (#324)

* Update version and changelog for v1.6.0
* Update docs
diff --git a/docs/dyn/sheets_v4.spreadsheets.html b/docs/dyn/sheets_v4.spreadsheets.html
index cd507af..0562d26 100644
--- a/docs/dyn/sheets_v4.spreadsheets.html
+++ b/docs/dyn/sheets_v4.spreadsheets.html
@@ -122,6 +122,15 @@
     The object takes the form of:
 
 { # The request for updating any aspect of a spreadsheet.
+    "responseRanges": [ # Limits the ranges included in the response spreadsheet.
+        # Meaningful only if include_spreadsheet_response is 'true'.
+      "A String",
+    ],
+    "includeSpreadsheetInResponse": True or False, # Determines if the update response should include the spreadsheet
+        # resource.
+    "responseIncludeGridData": True or False, # True if grid data should be returned. Meaningful only if
+        # if include_spreadsheet_response is 'true'.
+        # This parameter is ignored if a field mask was set in the request.
     "requests": [ # A list of updates to apply to the spreadsheet.
       { # A single kind of update to apply to a spreadsheet.
         "duplicateFilterView": { # Duplicates a particular filter view. # Duplicates a filter view.
@@ -3929,7 +3938,13 @@
             "index": 42, # The index of the sheet within the spreadsheet.
                 # When adding or updating sheet properties, if this field
                 # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
+                # of the sheet list. When updating sheet indices or inserting
+                # sheets, movement is considered in "before the move" indexes.
+                # For example, if there were 3 sheets (S1, S2, S3) in order to
+                # move S1 ahead of S2 the index would have to be set to 2. A sheet
+                # index update request will be ignored if the requested index is
+                # identical to the sheets current index or if the requested new
+                # index is equal to the current sheet index + 1.
             "title": "A String", # The name of the sheet.
             "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
                 # (If the sheet is an object sheet, containing a chart or image, then
@@ -5848,6 +5863,9 @@
             },
           },
         },
+        "deleteBanding": { # Removes the banded range with the given ID from the spreadsheet. # Removes a banded range
+          "bandedRangeId": 42, # The ID of the banded range to delete.
+        },
         "repeatCell": { # Updates all cells in the range to the values in the given Cell object. # Repeats a single cell across a range.
             # Only the fields listed in the fields field are updated; others are
             # unchanged.
@@ -11242,6 +11260,1129 @@
           "sheetId": 42, # The sheet to append rows or columns to.
           "dimension": "A String", # Whether rows or columns should be appended.
         },
+        "updateBanding": { # Updates properties of the supplied banded range. # Updates a banded range
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `bandedRange` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "bandedRange": { # A banded (alternating colors) range in a sheet. # The banded range to update with the new properties.
+            "range": { # A range on a sheet. # The range over which these properties are applied.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                # by-column basis throughout all the columns in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                # basis throughout all the rows in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "bandedRangeId": 42, # The id of the banded range.
+          },
+        },
         "autoResizeDimensions": { # Automatically resizes one or more dimensions based on the contents # Automatically resizes one or more dimensions based on the contents
             # of the cells in that dimension.
             # of the cells in that dimension.
@@ -11927,6 +13068,1128 @@
               # CUSTOM.
           "delimiterType": "A String", # The delimiter type to use.
         },
+        "addBanding": { # Adds a new banded range to the spreadsheet. # Adds a new banded range
+          "bandedRange": { # A banded (alternating colors) range in a sheet. # The banded range to add. The bandedRangeId
+              # field is optional; if one is not set, an id will be randomly generated. (It
+              # is an error to specify the ID of a range that already exists.)
+            "range": { # A range on a sheet. # The range over which these properties are applied.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                # by-column basis throughout all the columns in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                # basis throughout all the rows in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "bandedRangeId": 42, # The id of the banded range.
+          },
+        },
         "deleteFilterView": { # Deletes a particular filter view. # Deletes a filter view from a sheet.
           "filterId": 42, # The ID of the filter to delete.
         },
@@ -13057,7 +15320,13 @@
             "index": 42, # The index of the sheet within the spreadsheet.
                 # When adding or updating sheet properties, if this field
                 # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
+                # of the sheet list. When updating sheet indices or inserting
+                # sheets, movement is considered in "before the move" indexes.
+                # For example, if there were 3 sheets (S1, S2, S3) in order to
+                # move S1 ahead of S2 the index would have to be set to 2. A sheet
+                # index update request will be ignored if the requested index is
+                # identical to the sheets current index or if the requested new
+                # index is equal to the current sheet index + 1.
             "title": "A String", # The name of the sheet.
             "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
                 # (If the sheet is an object sheet, containing a chart or image, then
@@ -13389,6 +15658,6415 @@
 
     { # The reply for batch updating a spreadsheet.
     "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "updatedSpreadsheet": { # Resource that represents a spreadsheet. # The spreadsheet after updates were applied. This is only set if
+        # [BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response] is `true`.
+      "spreadsheetId": "A String", # The ID of the spreadsheet.
+          # This field is read-only.
+      "namedRanges": [ # The named ranges defined in a spreadsheet.
+        { # A named range.
+          "namedRangeId": "A String", # The ID of the named range.
+          "range": { # A range on a sheet. # The range this represents.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "name": "A String", # The name of the named range.
+        },
+      ],
+      "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+        "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+            #
+            # * an ISO 639-1 language code such as `en`
+            #
+            # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+            #
+            # * a combination of the ISO language code and country code, such as `en_US`
+            #
+            # Note: when updating this field, not all locales/languages are supported.
+        "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+            # `America/New_York`. If the time zone isn't recognized, this may
+            # be a custom time zone such as `GMT-07:00`.
+        "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+        "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+            # CellData.effectiveFormat will not be set if the
+            # cell's format is equal to this default format.
+            # This field is read-only.
+          "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+            "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                # the user's locale will be used if necessary for the given type.
+                # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                # information about the supported patterns.
+            "type": "A String", # The type of the number format.
+                # When writing, this field must be set.
+          },
+          "textDirection": "A String", # The direction of the text in the cell.
+          "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+              # When updating padding, every field must be specified.
+            "top": 42, # The top padding of the cell.
+            "right": 42, # The right padding of the cell.
+            "bottom": 42, # The bottom padding of the cell.
+            "left": 42, # The left padding of the cell.
+          },
+          "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+          "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+          "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+              # Absent values indicate that the field isn't specified.
+            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "bold": True or False, # True if the text is bold.
+            "strikethrough": True or False, # True if the text has a strikethrough.
+            "fontFamily": "A String", # The font family.
+            "fontSize": 42, # The size of the font.
+            "italic": True or False, # True if the text is italicized.
+            "underline": True or False, # True if the text is underlined.
+          },
+          "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+          "borders": { # The borders of the cell. # The borders of the cell.
+            "top": { # A border along a cell. # The top border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Deprecated; the width is determined by the "style" field.
+              "style": "A String", # The style of the border.
+            },
+            "right": { # A border along a cell. # The right border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Deprecated; the width is determined by the "style" field.
+              "style": "A String", # The style of the border.
+            },
+            "bottom": { # A border along a cell. # The bottom border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Deprecated; the width is determined by the "style" field.
+              "style": "A String", # The style of the border.
+            },
+            "left": { # A border along a cell. # The left border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Deprecated; the width is determined by the "style" field.
+              "style": "A String", # The style of the border.
+            },
+          },
+          "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+        },
+        "title": "A String", # The title of the spreadsheet.
+      },
+      "sheets": [ # The sheets that are part of a spreadsheet.
+        { # A sheet in a spreadsheet.
+          "conditionalFormats": [ # The conditional format rules in this sheet.
+            { # A rule describing a conditional format.
+              "ranges": [ # The ranges that will be formatted if the condition is true.
+                  # All the ranges must be on the same grid.
+                { # A range on a sheet.
+                    # All indexes are zero-based.
+                    # Indexes are half open, e.g the start index is inclusive
+                    # and the end index is exclusive -- [start_index, end_index).
+                    # Missing indexes indicate the range is unbounded on that side.
+                    #
+                    # For example, if `"Sheet1"` is sheet ID 0, then:
+                    #
+                    #   `Sheet1!A1:A1 == sheet_id: 0,
+                    #                   start_row_index: 0, end_row_index: 1,
+                    #                   start_column_index: 0, end_column_index: 1`
+                    #
+                    #   `Sheet1!A3:B4 == sheet_id: 0,
+                    #                   start_row_index: 2, end_row_index: 4,
+                    #                   start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1!A:B == sheet_id: 0,
+                    #                 start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1!A5:B == sheet_id: 0,
+                    #                  start_row_index: 4,
+                    #                  start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1 == sheet_id:0`
+                    #
+                    # The start index must always be less than or equal to the end index.
+                    # If the start index equals the end index, then the range is empty.
+                    # Empty ranges are typically not meaningful and are usually rendered in the
+                    # UI as `#REF!`.
+                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                  "sheetId": 42, # The sheet this range is on.
+                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+                "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                    # the format will be applied.
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+                "format": { # The format of a cell. # The format to apply.
+                    # Conditional formatting can only apply a subset of formatting:
+                    # bold, italic,
+                    # strikethrough,
+                    # foreground color &
+                    # background color.
+                  "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                        # the user's locale will be used if necessary for the given type.
+                        # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                        # information about the supported patterns.
+                    "type": "A String", # The type of the number format.
+                        # When writing, this field must be set.
+                  },
+                  "textDirection": "A String", # The direction of the text in the cell.
+                  "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                      # When updating padding, every field must be specified.
+                    "top": 42, # The top padding of the cell.
+                    "right": 42, # The right padding of the cell.
+                    "bottom": 42, # The bottom padding of the cell.
+                    "left": 42, # The left padding of the cell.
+                  },
+                  "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                  "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                  "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                      # Absent values indicate that the field isn't specified.
+                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "bold": True or False, # True if the text is bold.
+                    "strikethrough": True or False, # True if the text has a strikethrough.
+                    "fontFamily": "A String", # The font family.
+                    "fontSize": 42, # The size of the font.
+                    "italic": True or False, # True if the text is italicized.
+                    "underline": True or False, # True if the text is underlined.
+                  },
+                  "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                  "borders": { # The borders of the cell. # The borders of the cell.
+                    "top": { # A border along a cell. # The top border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Deprecated; the width is determined by the "style" field.
+                      "style": "A String", # The style of the border.
+                    },
+                    "right": { # A border along a cell. # The right border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Deprecated; the width is determined by the "style" field.
+                      "style": "A String", # The style of the border.
+                    },
+                    "bottom": { # A border along a cell. # The bottom border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Deprecated; the width is determined by the "style" field.
+                      "style": "A String", # The style of the border.
+                    },
+                    "left": { # A border along a cell. # The left border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Deprecated; the width is determined by the "style" field.
+                      "style": "A String", # The style of the border.
+                    },
+                  },
+                  "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                },
+              },
+              "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                  # the interpolation points listed. The format of a cell will vary
+                  # based on its contents as compared to the values of the interpolation
+                  # points.
+                "maxpoint": { # A single interpolation point on a gradient conditional format. # The final interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "midpoint": { # A single interpolation point on a gradient conditional format. # An optional midway interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "minpoint": { # A single interpolation point on a gradient conditional format. # The starting interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+              },
+            },
+          ],
+          "bandedRanges": [ # The banded (i.e. alternating colors) ranges on this sheet.
+            { # A banded (alternating colors) range in a sheet.
+              "range": { # A range on a sheet. # The range over which these properties are applied.
+                  # All indexes are zero-based.
+                  # Indexes are half open, e.g the start index is inclusive
+                  # and the end index is exclusive -- [start_index, end_index).
+                  # Missing indexes indicate the range is unbounded on that side.
+                  #
+                  # For example, if `"Sheet1"` is sheet ID 0, then:
+                  #
+                  #   `Sheet1!A1:A1 == sheet_id: 0,
+                  #                   start_row_index: 0, end_row_index: 1,
+                  #                   start_column_index: 0, end_column_index: 1`
+                  #
+                  #   `Sheet1!A3:B4 == sheet_id: 0,
+                  #                   start_row_index: 2, end_row_index: 4,
+                  #                   start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A:B == sheet_id: 0,
+                  #                 start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A5:B == sheet_id: 0,
+                  #                  start_row_index: 4,
+                  #                  start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1 == sheet_id:0`
+                  #
+                  # The start index must always be less than or equal to the end index.
+                  # If the start index equals the end index, then the range is empty.
+                  # Empty ranges are typically not meaningful and are usually rendered in the
+                  # UI as `#REF!`.
+                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                "sheetId": 42, # The sheet this range is on.
+                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+              "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                  # by-column basis throughout all the columns in the range. At least one of
+                  # row_properties or column_properties must be specified.
+                  # BandedRange.row_properties and BandedRange.column_properties are
+                  # set, the fill colors are applied to cells according to the following rules:
+                  #
+                  # * header_color and footer_color take priority over band colors.
+                  # * first_band_color takes priority over second_band_color.
+                  # * row_properties takes priority over column_properties.
+                  #
+                  # For example, the first row color takes priority over the first column
+                  # color, but the first column color takes priority over the second row color.
+                  # Similarly, the row header takes priority over the column header in the
+                  # top left cell, but the column header takes priority over the first row
+                  # color if the row header is not set.
+                "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                    # row or column will be filled with this color and the colors will
+                    # alternate between first_band_color and second_band_color starting
+                    # from the second row or column. Otherwise, the first row or column will be
+                    # filled with first_band_color and the colors will proceed to alternate
+                    # as they normally would.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                    # row or column will be filled with either first_band_color or
+                    # second_band_color, depending on the color of the previous row or
+                    # column.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+              },
+              "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                  # basis throughout all the rows in the range. At least one of
+                  # row_properties or column_properties must be specified.
+                  # BandedRange.row_properties and BandedRange.column_properties are
+                  # set, the fill colors are applied to cells according to the following rules:
+                  #
+                  # * header_color and footer_color take priority over band colors.
+                  # * first_band_color takes priority over second_band_color.
+                  # * row_properties takes priority over column_properties.
+                  #
+                  # For example, the first row color takes priority over the first column
+                  # color, but the first column color takes priority over the second row color.
+                  # Similarly, the row header takes priority over the column header in the
+                  # top left cell, but the column header takes priority over the first row
+                  # color if the row header is not set.
+                "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                    # row or column will be filled with this color and the colors will
+                    # alternate between first_band_color and second_band_color starting
+                    # from the second row or column. Otherwise, the first row or column will be
+                    # filled with first_band_color and the colors will proceed to alternate
+                    # as they normally would.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                    # row or column will be filled with either first_band_color or
+                    # second_band_color, depending on the color of the previous row or
+                    # column.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+              },
+              "bandedRangeId": 42, # The id of the banded range.
+            },
+          ],
+          "merges": [ # The ranges that are merged together.
+            { # A range on a sheet.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          ],
+          "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+            "range": { # A range on a sheet. # The range the filter covers.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+          "charts": [ # The specifications of every chart on this sheet.
+            { # A chart embedded in a sheet.
+              "chartId": 42, # The ID of the chart.
+              "position": { # The position of an embedded object such as a chart. # The position of the chart.
+                "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                    # is chosen for you. Used only when writing.
+                "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                    # is on its own sheet. Must be non-negative.
+                "overlayPosition": { # The location an object is overlaid on top of a grid. # The position at which the object is overlaid on top of a grid.
+                  "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                      # All indexes are zero-based.
+                    "rowIndex": 42, # The row index of the coordinate.
+                    "columnIndex": 42, # The column index of the coordinate.
+                    "sheetId": 42, # The sheet this coordinate is on.
+                  },
+                  "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                  "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+                },
+              },
+              "spec": { # The specifications of a chart. # The specification of the chart.
+                "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                  "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # All indexes are zero-based.
+                            # Indexes are half open, e.g the start index is inclusive
+                            # and the end index is exclusive -- [start_index, end_index).
+                            # Missing indexes indicate the range is unbounded on that side.
+                            #
+                            # For example, if `"Sheet1"` is sheet ID 0, then:
+                            #
+                            #   `Sheet1!A1:A1 == sheet_id: 0,
+                            #                   start_row_index: 0, end_row_index: 1,
+                            #                   start_column_index: 0, end_column_index: 1`
+                            #
+                            #   `Sheet1!A3:B4 == sheet_id: 0,
+                            #                   start_row_index: 2, end_row_index: 4,
+                            #                   start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A:B == sheet_id: 0,
+                            #                 start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A5:B == sheet_id: 0,
+                            #                  start_row_index: 4,
+                            #                  start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1 == sheet_id:0`
+                            #
+                            # The start index must always be less than or equal to the end index.
+                            # If the start index equals the end index, then the range is empty.
+                            # Empty ranges are typically not meaningful and are usually rendered in the
+                            # UI as `#REF!`.
+                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                          "sheetId": 42, # The sheet this range is on.
+                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # All indexes are zero-based.
+                            # Indexes are half open, e.g the start index is inclusive
+                            # and the end index is exclusive -- [start_index, end_index).
+                            # Missing indexes indicate the range is unbounded on that side.
+                            #
+                            # For example, if `"Sheet1"` is sheet ID 0, then:
+                            #
+                            #   `Sheet1!A1:A1 == sheet_id: 0,
+                            #                   start_row_index: 0, end_row_index: 1,
+                            #                   start_column_index: 0, end_column_index: 1`
+                            #
+                            #   `Sheet1!A3:B4 == sheet_id: 0,
+                            #                   start_row_index: 2, end_row_index: 4,
+                            #                   start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A:B == sheet_id: 0,
+                            #                 start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A5:B == sheet_id: 0,
+                            #                  start_row_index: 4,
+                            #                  start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1 == sheet_id:0`
+                            #
+                            # The start index must always be less than or equal to the end index.
+                            # If the start index equals the end index, then the range is empty.
+                            # Empty ranges are typically not meaningful and are usually rendered in the
+                            # UI as `#REF!`.
+                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                          "sheetId": 42, # The sheet this range is on.
+                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "threeDimensional": True or False, # True if the pie is three dimensional.
+                  "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                  "pieHole": 3.14, # The size of the hole in the pie chart.
+                },
+                "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                    # See BasicChartType for the list of all
+                    # charts this supports.
+                    # of charts this supports.
+                  "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                      # If not set, Google Sheets will guess how many rows are headers based
+                      # on the data.
+                      #
+                      # (Note that BasicChartAxis.title may override the axis title
+                      #  inferred from the header values.)
+                  "series": [ # The data this chart is visualizing.
+                    { # A single series of data in a chart.
+                        # For example, if charting stock prices over time, multiple series may exist,
+                        # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                      "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # All indexes are zero-based.
+                                # Indexes are half open, e.g the start index is inclusive
+                                # and the end index is exclusive -- [start_index, end_index).
+                                # Missing indexes indicate the range is unbounded on that side.
+                                #
+                                # For example, if `"Sheet1"` is sheet ID 0, then:
+                                #
+                                #   `Sheet1!A1:A1 == sheet_id: 0,
+                                #                   start_row_index: 0, end_row_index: 1,
+                                #                   start_column_index: 0, end_column_index: 1`
+                                #
+                                #   `Sheet1!A3:B4 == sheet_id: 0,
+                                #                   start_row_index: 2, end_row_index: 4,
+                                #                   start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1!A:B == sheet_id: 0,
+                                #                 start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1!A5:B == sheet_id: 0,
+                                #                  start_row_index: 4,
+                                #                  start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1 == sheet_id:0`
+                                #
+                                # The start index must always be less than or equal to the end index.
+                                # If the start index equals the end index, then the range is empty.
+                                # Empty ranges are typically not meaningful and are usually rendered in the
+                                # UI as `#REF!`.
+                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                              "sheetId": 42, # The sheet this range is on.
+                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                      "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                          # For example, if charting stocks over time, the "Volume" series
+                          # may want to be pinned to the right with the prices pinned to the left,
+                          # because the scale of trading volume is different than the scale of
+                          # prices.
+                          # It is an error to specify an axis that isn't a valid minor axis
+                          # for the chart's type.
+                      "type": "A String", # The type of this series. Valid only if the
+                          # chartType is
+                          # COMBO.
+                          # Different types will change the way the series is visualized.
+                          # Only LINE, AREA,
+                          # and COLUMN are supported.
+                    },
+                  ],
+                  "legendPosition": "A String", # The position of the chart legend.
+                  "domains": [ # The domain of data this is charting.
+                      # Only a single domain is currently supported.
+                    { # The domain of a chart.
+                        # For example, if charting stock prices over time, this would be the date.
+                      "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                          # this is the data representing the dates.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # All indexes are zero-based.
+                                # Indexes are half open, e.g the start index is inclusive
+                                # and the end index is exclusive -- [start_index, end_index).
+                                # Missing indexes indicate the range is unbounded on that side.
+                                #
+                                # For example, if `"Sheet1"` is sheet ID 0, then:
+                                #
+                                #   `Sheet1!A1:A1 == sheet_id: 0,
+                                #                   start_row_index: 0, end_row_index: 1,
+                                #                   start_column_index: 0, end_column_index: 1`
+                                #
+                                #   `Sheet1!A3:B4 == sheet_id: 0,
+                                #                   start_row_index: 2, end_row_index: 4,
+                                #                   start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1!A:B == sheet_id: 0,
+                                #                 start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1!A5:B == sheet_id: 0,
+                                #                  start_row_index: 4,
+                                #                  start_column_index: 0, end_column_index: 2`
+                                #
+                                #   `Sheet1 == sheet_id:0`
+                                #
+                                # The start index must always be less than or equal to the end index.
+                                # If the start index equals the end index, then the range is empty.
+                                # Empty ranges are typically not meaningful and are usually rendered in the
+                                # UI as `#REF!`.
+                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                              "sheetId": 42, # The sheet this range is on.
+                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                    },
+                  ],
+                  "chartType": "A String", # The type of the chart.
+                  "axis": [ # The axis on the chart.
+                    { # An axis of the chart.
+                        # A chart may not have more than one axis per
+                        # axis position.
+                      "position": "A String", # The position of this axis.
+                      "format": { # The format of a run of text in a cell. # The format of the title.
+                          # Only valid if the axis is not associated with the domain.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                          # from headers of the data.
+                    },
+                  ],
+                },
+                "title": "A String", # The title of the chart.
+              },
+            },
+          ],
+          "filterViews": [ # The filter views in this sheet.
+            { # A filter view.
+              "title": "A String", # The name of the filter view.
+              "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                  #
+                  # When writing, only one of range or named_range_id
+                  # may be set.
+              "filterViewId": 42, # The ID of the filter view.
+              "range": { # A range on a sheet. # The range this filter view covers.
+                  #
+                  # When writing, only one of range or named_range_id
+                  # may be set.
+                  # All indexes are zero-based.
+                  # Indexes are half open, e.g the start index is inclusive
+                  # and the end index is exclusive -- [start_index, end_index).
+                  # Missing indexes indicate the range is unbounded on that side.
+                  #
+                  # For example, if `"Sheet1"` is sheet ID 0, then:
+                  #
+                  #   `Sheet1!A1:A1 == sheet_id: 0,
+                  #                   start_row_index: 0, end_row_index: 1,
+                  #                   start_column_index: 0, end_column_index: 1`
+                  #
+                  #   `Sheet1!A3:B4 == sheet_id: 0,
+                  #                   start_row_index: 2, end_row_index: 4,
+                  #                   start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A:B == sheet_id: 0,
+                  #                 start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A5:B == sheet_id: 0,
+                  #                  start_row_index: 4,
+                  #                  start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1 == sheet_id:0`
+                  #
+                  # The start index must always be less than or equal to the end index.
+                  # If the start index equals the end index, then the range is empty.
+                  # Empty ranges are typically not meaningful and are usually rendered in the
+                  # UI as `#REF!`.
+                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                "sheetId": 42, # The sheet this range is on.
+                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+              "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                  # are equal in the earlier specifications.
+                { # A sort order associated with a specific column or row.
+                  "sortOrder": "A String", # The order data should be sorted.
+                  "dimensionIndex": 42, # The dimension the sort should be applied to.
+                },
+              ],
+              "criteria": { # The criteria for showing/hiding values per column.
+                  # The map's key is the column index, and the value is the criteria for
+                  # that column.
+                "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
+                  "hiddenValues": [ # Values that should be hidden.
+                    "A String",
+                  ],
+                  "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                      # (This does not override hiddenValues -- if a value is listed there,
+                      #  it will still be hidden.)
+                      # BooleanConditions are used by conditional formatting,
+                      # data validation, and the criteria in filters.
+                    "type": "A String", # The type of condition.
+                    "values": [ # The values of the condition. The number of supported values depends
+                        # on the condition type.  Some support zero values,
+                        # others one or two values,
+                        # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                      { # The value of the condition.
+                        "relativeDate": "A String", # A relative date (based on the current date).
+                            # Valid only if the type is
+                            # DATE_BEFORE,
+                            # DATE_AFTER,
+                            # DATE_ON_OR_BEFORE or
+                            # DATE_ON_OR_AFTER.
+                            #
+                            # Relative dates are not supported in data validation.
+                            # They are supported only in conditional formatting and
+                            # conditional filters.
+                        "userEnteredValue": "A String", # A value the condition is based on.
+                            # The value will be parsed as if the user typed into a cell.
+                            # Formulas are supported (and must begin with an `=`).
+                      },
+                    ],
+                  },
+                },
+              },
+            },
+          ],
+          "protectedRanges": [ # The protected ranges in this sheet.
+            { # A protected range.
+              "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                  # Unprotected ranges are only supported on protected sheets.
+                { # A range on a sheet.
+                    # All indexes are zero-based.
+                    # Indexes are half open, e.g the start index is inclusive
+                    # and the end index is exclusive -- [start_index, end_index).
+                    # Missing indexes indicate the range is unbounded on that side.
+                    #
+                    # For example, if `"Sheet1"` is sheet ID 0, then:
+                    #
+                    #   `Sheet1!A1:A1 == sheet_id: 0,
+                    #                   start_row_index: 0, end_row_index: 1,
+                    #                   start_column_index: 0, end_column_index: 1`
+                    #
+                    #   `Sheet1!A3:B4 == sheet_id: 0,
+                    #                   start_row_index: 2, end_row_index: 4,
+                    #                   start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1!A:B == sheet_id: 0,
+                    #                 start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1!A5:B == sheet_id: 0,
+                    #                  start_row_index: 4,
+                    #                  start_column_index: 0, end_column_index: 2`
+                    #
+                    #   `Sheet1 == sheet_id:0`
+                    #
+                    # The start index must always be less than or equal to the end index.
+                    # If the start index equals the end index, then the range is empty.
+                    # Empty ranges are typically not meaningful and are usually rendered in the
+                    # UI as `#REF!`.
+                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                  "sheetId": 42, # The sheet this range is on.
+                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                  # protected area.
+                  # This field is read-only.
+              "description": "A String", # The description of this protected range.
+              "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                  #
+                  # When writing, only one of range or named_range_id
+                  # may be set.
+              "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                  # This field is only visible to users with edit access to the protected
+                  # range and the document.
+                  # Editors are not supported with warning_only protection.
+                "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                    # range.  Domain protection is only supported on documents within a domain.
+                "users": [ # The email addresses of users with edit access to the protected range.
+                  "A String",
+                ],
+                "groups": [ # The email addresses of groups with edit access to the protected range.
+                  "A String",
+                ],
+              },
+              "protectedRangeId": 42, # The ID of the protected range.
+                  # This field is read-only.
+              "warningOnly": True or False, # True if this protected range will show a warning when editing.
+                  # Warning-based protection means that every user can edit data in the
+                  # protected range, except editing will prompt a warning asking the user
+                  # to confirm the edit.
+                  #
+                  # When writing: if this field is true, then editors is ignored.
+                  # Additionally, if this field is changed from true to false and the
+                  # `editors` field is not set (nor included in the field mask), then
+                  # the editors will be set to all the editors in the document.
+              "range": { # A range on a sheet. # The range that is being protected.
+                  # The range may be fully unbounded, in which case this is considered
+                  # a protected sheet.
+                  #
+                  # When writing, only one of range or named_range_id
+                  # may be set.
+                  # All indexes are zero-based.
+                  # Indexes are half open, e.g the start index is inclusive
+                  # and the end index is exclusive -- [start_index, end_index).
+                  # Missing indexes indicate the range is unbounded on that side.
+                  #
+                  # For example, if `"Sheet1"` is sheet ID 0, then:
+                  #
+                  #   `Sheet1!A1:A1 == sheet_id: 0,
+                  #                   start_row_index: 0, end_row_index: 1,
+                  #                   start_column_index: 0, end_column_index: 1`
+                  #
+                  #   `Sheet1!A3:B4 == sheet_id: 0,
+                  #                   start_row_index: 2, end_row_index: 4,
+                  #                   start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A:B == sheet_id: 0,
+                  #                 start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A5:B == sheet_id: 0,
+                  #                  start_row_index: 4,
+                  #                  start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1 == sheet_id:0`
+                  #
+                  # The start index must always be less than or equal to the end index.
+                  # If the start index equals the end index, then the range is empty.
+                  # Empty ranges are typically not meaningful and are usually rendered in the
+                  # UI as `#REF!`.
+                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                "sheetId": 42, # The sheet this range is on.
+                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            },
+          ],
+          "data": [ # Data in the grid, if this is a grid sheet.
+              # The number of GridData objects returned is dependent on the number of
+              # ranges requested on this sheet. For example, if this is representing
+              # `Sheet1`, and the spreadsheet was requested with ranges
+              # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+              # startRow/startColumn of `0`,
+              # while the second one will have `startRow 14` (zero-based row 15),
+              # and `startColumn 3` (zero-based column D).
+            { # Data in the grid, as well as metadata about the dimensions.
+              "startRow": 42, # The first row this GridData refers to, zero-based.
+              "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+                  # in start_row.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "startColumn": 42, # The first column this GridData refers to, zero-based.
+              "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+                  # in start_column.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "rowData": [ # The data in the grid, one entry per row,
+                  # starting with the row in startRow.
+                  # The values in RowData will correspond to columns starting
+                  # at start_column.
+                { # Data about each cell in a row.
+                  "values": [ # The values in the row, one per column.
+                    { # Data about a specific cell.
+                      "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                          # is computed dynamically based on its data, grouping, filters, values,
+                          # etc. Only the top-left cell of the pivot table contains the pivot table
+                          # definition. The other cells will contain the calculated values of the
+                          # results of the pivot in their effective_value fields.
+                        "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                            # or vertically (as rows).
+                        "rows": [ # Each row grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                        "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                            # All indexes are zero-based.
+                            # Indexes are half open, e.g the start index is inclusive
+                            # and the end index is exclusive -- [start_index, end_index).
+                            # Missing indexes indicate the range is unbounded on that side.
+                            #
+                            # For example, if `"Sheet1"` is sheet ID 0, then:
+                            #
+                            #   `Sheet1!A1:A1 == sheet_id: 0,
+                            #                   start_row_index: 0, end_row_index: 1,
+                            #                   start_column_index: 0, end_column_index: 1`
+                            #
+                            #   `Sheet1!A3:B4 == sheet_id: 0,
+                            #                   start_row_index: 2, end_row_index: 4,
+                            #                   start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A:B == sheet_id: 0,
+                            #                 start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A5:B == sheet_id: 0,
+                            #                  start_row_index: 4,
+                            #                  start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1 == sheet_id:0`
+                            #
+                            # The start index must always be less than or equal to the end index.
+                            # If the start index equals the end index, then the range is empty.
+                            # Empty ranges are typically not meaningful and are usually rendered in the
+                            # UI as `#REF!`.
+                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                          "sheetId": 42, # The sheet this range is on.
+                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                        "values": [ # A list of values to include in the pivot table.
+                          { # The definition of how a value in a pivot table should be calculated.
+                            "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                                # with an `=` character.
+                            "summarizeFunction": "A String", # A function to summarize the value.
+                                # If formula is set, the only supported values are
+                                # SUM and
+                                # CUSTOM.
+                                # If sourceColumnOffset is set, then `CUSTOM`
+                                # is not supported.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                                #
+                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                                # means this value refers to column `C`, whereas the offset `1` would
+                                # refer to column `D`.
+                            "name": "A String", # A name to use for the value. This is only used if formula was set.
+                                # Otherwise, the column name is used.
+                          },
+                        ],
+                        "criteria": { # An optional mapping of filters per source column offset.
+                            #
+                            # The filters will be applied before aggregating data into the pivot table.
+                            # The map's key is the column offset of the source range that you want to
+                            # filter, and the value is the criteria for that column.
+                            #
+                            # For example, if the source was `C10:E15`, a key of `0` will have the filter
+                            # for column `C`, whereas the key `1` is for column `D`.
+                          "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                            "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                              "A String",
+                            ],
+                          },
+                        },
+                        "columns": [ # Each column grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                      },
+                      "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                          # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                      "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                          # the calculated value.  For cells with literals, this will be
+                          # the same as the user_entered_value.
+                          # This field is read-only.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "formattedValue": "A String", # The formatted value of the cell.
+                          # This is the value as it's shown to the user.
+                          # This field is read-only.
+                      "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # serial number format.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "note": "A String", # Any note on the cell.
+                      "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                          # This includes the results of applying any conditional formatting and,
+                          # if the cell contains a formula, the computed number format.
+                          # If the effective format is the default format, effective format will
+                          # not be written.
+                          # This field is read-only.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                              # the user's locale will be used if necessary for the given type.
+                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                              # information about the supported patterns.
+                          "type": "A String", # The type of the number format.
+                              # When writing, this field must be set.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                          #
+                          # When writing, the new format will be merged with the existing format.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                              # the user's locale will be used if necessary for the given type.
+                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                              # information about the supported patterns.
+                          "type": "A String", # The type of the number format.
+                              # When writing, this field must be set.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Deprecated; the width is determined by the "style" field.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                          #
+                          # When writing, the new data validation rule will overwrite any prior rule.
+                        "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                            # If true, "List" conditions will show a dropdown.
+                        "strict": True or False, # True if invalid data should be rejected.
+                        "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                        "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                            # BooleanConditions are used by conditional formatting,
+                            # data validation, and the criteria in filters.
+                          "type": "A String", # The type of condition.
+                          "values": [ # The values of the condition. The number of supported values depends
+                              # on the condition type.  Some support zero values,
+                              # others one or two values,
+                              # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                            { # The value of the condition.
+                              "relativeDate": "A String", # A relative date (based on the current date).
+                                  # Valid only if the type is
+                                  # DATE_BEFORE,
+                                  # DATE_AFTER,
+                                  # DATE_ON_OR_BEFORE or
+                                  # DATE_ON_OR_AFTER.
+                                  #
+                                  # Relative dates are not supported in data validation.
+                                  # They are supported only in conditional formatting and
+                                  # conditional filters.
+                              "userEnteredValue": "A String", # A value the condition is based on.
+                                  # The value will be parsed as if the user typed into a cell.
+                                  # Formulas are supported (and must begin with an `=`).
+                            },
+                          ],
+                        },
+                      },
+                      "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.  Runs are only valid
+                          # on user entered strings, not formulas, bools, or numbers.
+                          # Runs start at specific indexes in the text and continue until the next
+                          # run. Properties of a run will continue unless explicitly changed
+                          # in a subsequent run (and properties of the first run will continue
+                          # the properties of the cell unless explicitly changed).
+                          #
+                          # When writing, the new runs will overwrite any prior runs.  When writing a
+                          # new user_entered_value, previous runs will be erased.
+                        { # A run of a text format. The format of this run continues until the start
+                            # index of the next run.
+                            # When updating, all fields must be set.
+                          "startIndex": 42, # The character index where this run starts.
+                          "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                              # Absent values indicate that the field isn't specified.
+                            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "bold": True or False, # True if the text is bold.
+                            "strikethrough": True or False, # True if the text has a strikethrough.
+                            "fontFamily": "A String", # The font family.
+                            "fontSize": 42, # The size of the font.
+                            "italic": True or False, # True if the text is italicized.
+                            "underline": True or False, # True if the text is underlined.
+                          },
+                        },
+                      ],
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "properties": { # Properties of a sheet. # The properties of the sheet.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list. When updating sheet indices or inserting
+                # sheets, movement is considered in "before the move" indexes.
+                # For example, if there were 3 sheets (S1, S2, S3) in order to
+                # move S1 ahead of S2 the index would have to be set to 2. A sheet
+                # index update request will be ignored if the requested index is
+                # identical to the sheets current index or if the requested new
+                # index is equal to the current sheet index + 1.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+      ],
+      "spreadsheetUrl": "A String", # The url of the spreadsheet.
+          # This field is read-only.
+    },
     "replies": [ # The reply of the updates.  This maps 1:1 with the updates, although
         # replies to some requests may be empty.
       { # A single response from an update.
@@ -13490,7 +22168,13 @@
             "index": 42, # The index of the sheet within the spreadsheet.
                 # When adding or updating sheet properties, if this field
                 # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
+                # of the sheet list. When updating sheet indices or inserting
+                # sheets, movement is considered in "before the move" indexes.
+                # For example, if there were 3 sheets (S1, S2, S3) in order to
+                # move S1 ahead of S2 the index would have to be set to 2. A sheet
+                # index update request will be ignored if the requested index is
+                # identical to the sheets current index or if the requested new
+                # index is equal to the current sheet index + 1.
             "title": "A String", # The name of the sheet.
             "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
                 # (If the sheet is an object sheet, containing a chart or image, then
@@ -16754,7 +25438,13 @@
             "index": 42, # The index of the sheet within the spreadsheet.
                 # When adding or updating sheet properties, if this field
                 # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
+                # of the sheet list. When updating sheet indices or inserting
+                # sheets, movement is considered in "before the move" indexes.
+                # For example, if there were 3 sheets (S1, S2, S3) in order to
+                # move S1 ahead of S2 the index would have to be set to 2. A sheet
+                # index update request will be ignored if the requested index is
+                # identical to the sheets current index or if the requested new
+                # index is equal to the current sheet index + 1.
             "title": "A String", # The name of the sheet.
             "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
                 # (If the sheet is an object sheet, containing a chart or image, then
@@ -18383,6 +27073,1126 @@
             },
           },
         },
+        "addBanding": { # The result of adding a banded range. # A reply from adding a banded range.
+          "bandedRange": { # A banded (alternating colors) range in a sheet. # The banded range that was added.
+            "range": { # A range on a sheet. # The range over which these properties are applied.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                # by-column basis throughout all the columns in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                # basis throughout all the rows in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "bandedRangeId": 42, # The id of the banded range.
+          },
+        },
         "addFilterView": { # The result of adding a filter view. # A reply from adding a filter view.
           "filter": { # A filter view. # The newly added filter view.
             "title": "A String", # The name of the filter view.
@@ -18488,6 +28298,6423 @@
     The object takes the form of:
 
 { # Resource that represents a spreadsheet.
+  "spreadsheetId": "A String", # The ID of the spreadsheet.
+      # This field is read-only.
+  "namedRanges": [ # The named ranges defined in a spreadsheet.
+    { # A named range.
+      "namedRangeId": "A String", # The ID of the named range.
+      "range": { # A range on a sheet. # The range this represents.
+          # All indexes are zero-based.
+          # Indexes are half open, e.g the start index is inclusive
+          # and the end index is exclusive -- [start_index, end_index).
+          # Missing indexes indicate the range is unbounded on that side.
+          #
+          # For example, if `"Sheet1"` is sheet ID 0, then:
+          #
+          #   `Sheet1!A1:A1 == sheet_id: 0,
+          #                   start_row_index: 0, end_row_index: 1,
+          #                   start_column_index: 0, end_column_index: 1`
+          #
+          #   `Sheet1!A3:B4 == sheet_id: 0,
+          #                   start_row_index: 2, end_row_index: 4,
+          #                   start_column_index: 0, end_column_index: 2`
+          #
+          #   `Sheet1!A:B == sheet_id: 0,
+          #                 start_column_index: 0, end_column_index: 2`
+          #
+          #   `Sheet1!A5:B == sheet_id: 0,
+          #                  start_row_index: 4,
+          #                  start_column_index: 0, end_column_index: 2`
+          #
+          #   `Sheet1 == sheet_id:0`
+          #
+          # The start index must always be less than or equal to the end index.
+          # If the start index equals the end index, then the range is empty.
+          # Empty ranges are typically not meaningful and are usually rendered in the
+          # UI as `#REF!`.
+        "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+        "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+        "sheetId": 42, # The sheet this range is on.
+        "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+      },
+      "name": "A String", # The name of the named range.
+    },
+  ],
+  "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+    "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+        #
+        # * an ISO 639-1 language code such as `en`
+        #
+        # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+        #
+        # * a combination of the ISO language code and country code, such as `en_US`
+        #
+        # Note: when updating this field, not all locales/languages are supported.
+    "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+        # `America/New_York`. If the time zone isn't recognized, this may
+        # be a custom time zone such as `GMT-07:00`.
+    "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+    "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+        # CellData.effectiveFormat will not be set if the
+        # cell's format is equal to this default format.
+        # This field is read-only.
+      "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+        "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+            # the user's locale will be used if necessary for the given type.
+            # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+            # information about the supported patterns.
+        "type": "A String", # The type of the number format.
+            # When writing, this field must be set.
+      },
+      "textDirection": "A String", # The direction of the text in the cell.
+      "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+          # When updating padding, every field must be specified.
+        "top": 42, # The top padding of the cell.
+        "right": 42, # The right padding of the cell.
+        "bottom": 42, # The bottom padding of the cell.
+        "left": 42, # The left padding of the cell.
+      },
+      "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+      "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+          # for simplicity of conversion to/from color representations in various
+          # languages over compactness; for example, the fields of this representation
+          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+          # method in iOS; and, with just a little work, it can be easily formatted into
+          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+          #
+          # Example (Java):
+          #
+          #      import com.google.type.Color;
+          #
+          #      // ...
+          #      public static java.awt.Color fromProto(Color protocolor) {
+          #        float alpha = protocolor.hasAlpha()
+          #            ? protocolor.getAlpha().getValue()
+          #            : 1.0;
+          #
+          #        return new java.awt.Color(
+          #            protocolor.getRed(),
+          #            protocolor.getGreen(),
+          #            protocolor.getBlue(),
+          #            alpha);
+          #      }
+          #
+          #      public static Color toProto(java.awt.Color color) {
+          #        float red = (float) color.getRed();
+          #        float green = (float) color.getGreen();
+          #        float blue = (float) color.getBlue();
+          #        float denominator = 255.0;
+          #        Color.Builder resultBuilder =
+          #            Color
+          #                .newBuilder()
+          #                .setRed(red / denominator)
+          #                .setGreen(green / denominator)
+          #                .setBlue(blue / denominator);
+          #        int alpha = color.getAlpha();
+          #        if (alpha != 255) {
+          #          result.setAlpha(
+          #              FloatValue
+          #                  .newBuilder()
+          #                  .setValue(((float) alpha) / denominator)
+          #                  .build());
+          #        }
+          #        return resultBuilder.build();
+          #      }
+          #      // ...
+          #
+          # Example (iOS / Obj-C):
+          #
+          #      // ...
+          #      static UIColor* fromProto(Color* protocolor) {
+          #         float red = [protocolor red];
+          #         float green = [protocolor green];
+          #         float blue = [protocolor blue];
+          #         FloatValue* alpha_wrapper = [protocolor alpha];
+          #         float alpha = 1.0;
+          #         if (alpha_wrapper != nil) {
+          #           alpha = [alpha_wrapper value];
+          #         }
+          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+          #      }
+          #
+          #      static Color* toProto(UIColor* color) {
+          #          CGFloat red, green, blue, alpha;
+          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+          #            return nil;
+          #          }
+          #          Color* result = [Color alloc] init];
+          #          [result setRed:red];
+          #          [result setGreen:green];
+          #          [result setBlue:blue];
+          #          if (alpha <= 0.9999) {
+          #            [result setAlpha:floatWrapperWithValue(alpha)];
+          #          }
+          #          [result autorelease];
+          #          return result;
+          #     }
+          #     // ...
+          #
+          #  Example (JavaScript):
+          #
+          #     // ...
+          #
+          #     var protoToCssColor = function(rgb_color) {
+          #        var redFrac = rgb_color.red || 0.0;
+          #        var greenFrac = rgb_color.green || 0.0;
+          #        var blueFrac = rgb_color.blue || 0.0;
+          #        var red = Math.floor(redFrac * 255);
+          #        var green = Math.floor(greenFrac * 255);
+          #        var blue = Math.floor(blueFrac * 255);
+          #
+          #        if (!('alpha' in rgb_color)) {
+          #           return rgbToCssColor_(red, green, blue);
+          #        }
+          #
+          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+          #        var rgbParams = [red, green, blue].join(',');
+          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+          #     };
+          #
+          #     var rgbToCssColor_ = function(red, green, blue) {
+          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+          #       var hexString = rgbNumber.toString(16);
+          #       var missingZeros = 6 - hexString.length;
+          #       var resultBuilder = ['#'];
+          #       for (var i = 0; i < missingZeros; i++) {
+          #          resultBuilder.push('0');
+          #       }
+          #       resultBuilder.push(hexString);
+          #       return resultBuilder.join('');
+          #     };
+          #
+          #     // ...
+        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+            # the final pixel color is defined by the equation:
+            #
+            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+            #
+            # This means that a value of 1.0 corresponds to a solid color, whereas
+            # a value of 0.0 corresponds to a completely transparent color. This
+            # uses a wrapper message rather than a simple float scalar so that it is
+            # possible to distinguish between a default value and the value being unset.
+            # If omitted, this color object is to be rendered as a solid color
+            # (as if the alpha value had been explicitly given with a value of 1.0).
+        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+      },
+      "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+      "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+          # Absent values indicate that the field isn't specified.
+        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+            # for simplicity of conversion to/from color representations in various
+            # languages over compactness; for example, the fields of this representation
+            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+            # method in iOS; and, with just a little work, it can be easily formatted into
+            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+            #
+            # Example (Java):
+            #
+            #      import com.google.type.Color;
+            #
+            #      // ...
+            #      public static java.awt.Color fromProto(Color protocolor) {
+            #        float alpha = protocolor.hasAlpha()
+            #            ? protocolor.getAlpha().getValue()
+            #            : 1.0;
+            #
+            #        return new java.awt.Color(
+            #            protocolor.getRed(),
+            #            protocolor.getGreen(),
+            #            protocolor.getBlue(),
+            #            alpha);
+            #      }
+            #
+            #      public static Color toProto(java.awt.Color color) {
+            #        float red = (float) color.getRed();
+            #        float green = (float) color.getGreen();
+            #        float blue = (float) color.getBlue();
+            #        float denominator = 255.0;
+            #        Color.Builder resultBuilder =
+            #            Color
+            #                .newBuilder()
+            #                .setRed(red / denominator)
+            #                .setGreen(green / denominator)
+            #                .setBlue(blue / denominator);
+            #        int alpha = color.getAlpha();
+            #        if (alpha != 255) {
+            #          result.setAlpha(
+            #              FloatValue
+            #                  .newBuilder()
+            #                  .setValue(((float) alpha) / denominator)
+            #                  .build());
+            #        }
+            #        return resultBuilder.build();
+            #      }
+            #      // ...
+            #
+            # Example (iOS / Obj-C):
+            #
+            #      // ...
+            #      static UIColor* fromProto(Color* protocolor) {
+            #         float red = [protocolor red];
+            #         float green = [protocolor green];
+            #         float blue = [protocolor blue];
+            #         FloatValue* alpha_wrapper = [protocolor alpha];
+            #         float alpha = 1.0;
+            #         if (alpha_wrapper != nil) {
+            #           alpha = [alpha_wrapper value];
+            #         }
+            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+            #      }
+            #
+            #      static Color* toProto(UIColor* color) {
+            #          CGFloat red, green, blue, alpha;
+            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+            #            return nil;
+            #          }
+            #          Color* result = [Color alloc] init];
+            #          [result setRed:red];
+            #          [result setGreen:green];
+            #          [result setBlue:blue];
+            #          if (alpha <= 0.9999) {
+            #            [result setAlpha:floatWrapperWithValue(alpha)];
+            #          }
+            #          [result autorelease];
+            #          return result;
+            #     }
+            #     // ...
+            #
+            #  Example (JavaScript):
+            #
+            #     // ...
+            #
+            #     var protoToCssColor = function(rgb_color) {
+            #        var redFrac = rgb_color.red || 0.0;
+            #        var greenFrac = rgb_color.green || 0.0;
+            #        var blueFrac = rgb_color.blue || 0.0;
+            #        var red = Math.floor(redFrac * 255);
+            #        var green = Math.floor(greenFrac * 255);
+            #        var blue = Math.floor(blueFrac * 255);
+            #
+            #        if (!('alpha' in rgb_color)) {
+            #           return rgbToCssColor_(red, green, blue);
+            #        }
+            #
+            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+            #        var rgbParams = [red, green, blue].join(',');
+            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+            #     };
+            #
+            #     var rgbToCssColor_ = function(red, green, blue) {
+            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+            #       var hexString = rgbNumber.toString(16);
+            #       var missingZeros = 6 - hexString.length;
+            #       var resultBuilder = ['#'];
+            #       for (var i = 0; i < missingZeros; i++) {
+            #          resultBuilder.push('0');
+            #       }
+            #       resultBuilder.push(hexString);
+            #       return resultBuilder.join('');
+            #     };
+            #
+            #     // ...
+          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+              # the final pixel color is defined by the equation:
+              #
+              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+              #
+              # This means that a value of 1.0 corresponds to a solid color, whereas
+              # a value of 0.0 corresponds to a completely transparent color. This
+              # uses a wrapper message rather than a simple float scalar so that it is
+              # possible to distinguish between a default value and the value being unset.
+              # If omitted, this color object is to be rendered as a solid color
+              # (as if the alpha value had been explicitly given with a value of 1.0).
+          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+        },
+        "bold": True or False, # True if the text is bold.
+        "strikethrough": True or False, # True if the text has a strikethrough.
+        "fontFamily": "A String", # The font family.
+        "fontSize": 42, # The size of the font.
+        "italic": True or False, # True if the text is italicized.
+        "underline": True or False, # True if the text is underlined.
+      },
+      "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+      "borders": { # The borders of the cell. # The borders of the cell.
+        "top": { # A border along a cell. # The top border of the cell.
+          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "width": 42, # The width of the border, in pixels.
+              # Deprecated; the width is determined by the "style" field.
+          "style": "A String", # The style of the border.
+        },
+        "right": { # A border along a cell. # The right border of the cell.
+          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "width": 42, # The width of the border, in pixels.
+              # Deprecated; the width is determined by the "style" field.
+          "style": "A String", # The style of the border.
+        },
+        "bottom": { # A border along a cell. # The bottom border of the cell.
+          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "width": 42, # The width of the border, in pixels.
+              # Deprecated; the width is determined by the "style" field.
+          "style": "A String", # The style of the border.
+        },
+        "left": { # A border along a cell. # The left border of the cell.
+          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "width": 42, # The width of the border, in pixels.
+              # Deprecated; the width is determined by the "style" field.
+          "style": "A String", # The style of the border.
+        },
+      },
+      "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+    },
+    "title": "A String", # The title of the spreadsheet.
+  },
+  "sheets": [ # The sheets that are part of a spreadsheet.
+    { # A sheet in a spreadsheet.
+      "conditionalFormats": [ # The conditional format rules in this sheet.
+        { # A rule describing a conditional format.
+          "ranges": [ # The ranges that will be formatted if the condition is true.
+              # All the ranges must be on the same grid.
+            { # A range on a sheet.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          ],
+          "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+            "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                # the format will be applied.
+                # BooleanConditions are used by conditional formatting,
+                # data validation, and the criteria in filters.
+              "type": "A String", # The type of condition.
+              "values": [ # The values of the condition. The number of supported values depends
+                  # on the condition type.  Some support zero values,
+                  # others one or two values,
+                  # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                { # The value of the condition.
+                  "relativeDate": "A String", # A relative date (based on the current date).
+                      # Valid only if the type is
+                      # DATE_BEFORE,
+                      # DATE_AFTER,
+                      # DATE_ON_OR_BEFORE or
+                      # DATE_ON_OR_AFTER.
+                      #
+                      # Relative dates are not supported in data validation.
+                      # They are supported only in conditional formatting and
+                      # conditional filters.
+                  "userEnteredValue": "A String", # A value the condition is based on.
+                      # The value will be parsed as if the user typed into a cell.
+                      # Formulas are supported (and must begin with an `=`).
+                },
+              ],
+            },
+            "format": { # The format of a cell. # The format to apply.
+                # Conditional formatting can only apply a subset of formatting:
+                # bold, italic,
+                # strikethrough,
+                # foreground color &
+                # background color.
+              "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                    # the user's locale will be used if necessary for the given type.
+                    # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                    # information about the supported patterns.
+                "type": "A String", # The type of the number format.
+                    # When writing, this field must be set.
+              },
+              "textDirection": "A String", # The direction of the text in the cell.
+              "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                  # When updating padding, every field must be specified.
+                "top": 42, # The top padding of the cell.
+                "right": 42, # The right padding of the cell.
+                "bottom": 42, # The bottom padding of the cell.
+                "left": 42, # The left padding of the cell.
+              },
+              "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+              "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+              "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                  # Absent values indicate that the field isn't specified.
+                "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "bold": True or False, # True if the text is bold.
+                "strikethrough": True or False, # True if the text has a strikethrough.
+                "fontFamily": "A String", # The font family.
+                "fontSize": 42, # The size of the font.
+                "italic": True or False, # True if the text is italicized.
+                "underline": True or False, # True if the text is underlined.
+              },
+              "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+              "borders": { # The borders of the cell. # The borders of the cell.
+                "top": { # A border along a cell. # The top border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Deprecated; the width is determined by the "style" field.
+                  "style": "A String", # The style of the border.
+                },
+                "right": { # A border along a cell. # The right border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Deprecated; the width is determined by the "style" field.
+                  "style": "A String", # The style of the border.
+                },
+                "bottom": { # A border along a cell. # The bottom border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Deprecated; the width is determined by the "style" field.
+                  "style": "A String", # The style of the border.
+                },
+                "left": { # A border along a cell. # The left border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Deprecated; the width is determined by the "style" field.
+                  "style": "A String", # The style of the border.
+                },
+              },
+              "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+            },
+          },
+          "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+              # the interpolation points listed. The format of a cell will vary
+              # based on its contents as compared to the values of the interpolation
+              # points.
+            "maxpoint": { # A single interpolation point on a gradient conditional format. # The final interpolation point.
+                # These pin the gradient color scale according to the color,
+                # type and value chosen.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "type": "A String", # How the value should be interpreted.
+              "value": "A String", # The value this interpolation point uses.  May be a formula.
+                  # Unused if type is MIN or
+                  # MAX.
+            },
+            "midpoint": { # A single interpolation point on a gradient conditional format. # An optional midway interpolation point.
+                # These pin the gradient color scale according to the color,
+                # type and value chosen.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "type": "A String", # How the value should be interpreted.
+              "value": "A String", # The value this interpolation point uses.  May be a formula.
+                  # Unused if type is MIN or
+                  # MAX.
+            },
+            "minpoint": { # A single interpolation point on a gradient conditional format. # The starting interpolation point.
+                # These pin the gradient color scale according to the color,
+                # type and value chosen.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "type": "A String", # How the value should be interpreted.
+              "value": "A String", # The value this interpolation point uses.  May be a formula.
+                  # Unused if type is MIN or
+                  # MAX.
+            },
+          },
+        },
+      ],
+      "bandedRanges": [ # The banded (i.e. alternating colors) ranges on this sheet.
+        { # A banded (alternating colors) range in a sheet.
+          "range": { # A range on a sheet. # The range over which these properties are applied.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+              # by-column basis throughout all the columns in the range. At least one of
+              # row_properties or column_properties must be specified.
+              # BandedRange.row_properties and BandedRange.column_properties are
+              # set, the fill colors are applied to cells according to the following rules:
+              #
+              # * header_color and footer_color take priority over band colors.
+              # * first_band_color takes priority over second_band_color.
+              # * row_properties takes priority over column_properties.
+              #
+              # For example, the first row color takes priority over the first column
+              # color, but the first column color takes priority over the second row color.
+              # Similarly, the row header takes priority over the column header in the
+              # top left cell, but the column header takes priority over the first row
+              # color if the row header is not set.
+            "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                # row or column will be filled with this color and the colors will
+                # alternate between first_band_color and second_band_color starting
+                # from the second row or column. Otherwise, the first row or column will be
+                # filled with first_band_color and the colors will proceed to alternate
+                # as they normally would.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                # row or column will be filled with either first_band_color or
+                # second_band_color, depending on the color of the previous row or
+                # column.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+          },
+          "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+              # basis throughout all the rows in the range. At least one of
+              # row_properties or column_properties must be specified.
+              # BandedRange.row_properties and BandedRange.column_properties are
+              # set, the fill colors are applied to cells according to the following rules:
+              #
+              # * header_color and footer_color take priority over band colors.
+              # * first_band_color takes priority over second_band_color.
+              # * row_properties takes priority over column_properties.
+              #
+              # For example, the first row color takes priority over the first column
+              # color, but the first column color takes priority over the second row color.
+              # Similarly, the row header takes priority over the column header in the
+              # top left cell, but the column header takes priority over the first row
+              # color if the row header is not set.
+            "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                # row or column will be filled with this color and the colors will
+                # alternate between first_band_color and second_band_color starting
+                # from the second row or column. Otherwise, the first row or column will be
+                # filled with first_band_color and the colors will proceed to alternate
+                # as they normally would.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                # row or column will be filled with either first_band_color or
+                # second_band_color, depending on the color of the previous row or
+                # column.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+          },
+          "bandedRangeId": 42, # The id of the banded range.
+        },
+      ],
+      "merges": [ # The ranges that are merged together.
+        { # A range on a sheet.
+            # All indexes are zero-based.
+            # Indexes are half open, e.g the start index is inclusive
+            # and the end index is exclusive -- [start_index, end_index).
+            # Missing indexes indicate the range is unbounded on that side.
+            #
+            # For example, if `"Sheet1"` is sheet ID 0, then:
+            #
+            #   `Sheet1!A1:A1 == sheet_id: 0,
+            #                   start_row_index: 0, end_row_index: 1,
+            #                   start_column_index: 0, end_column_index: 1`
+            #
+            #   `Sheet1!A3:B4 == sheet_id: 0,
+            #                   start_row_index: 2, end_row_index: 4,
+            #                   start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A:B == sheet_id: 0,
+            #                 start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A5:B == sheet_id: 0,
+            #                  start_row_index: 4,
+            #                  start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1 == sheet_id:0`
+            #
+            # The start index must always be less than or equal to the end index.
+            # If the start index equals the end index, then the range is empty.
+            # Empty ranges are typically not meaningful and are usually rendered in the
+            # UI as `#REF!`.
+          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+          "sheetId": 42, # The sheet this range is on.
+          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+        },
+      ],
+      "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+        "range": { # A range on a sheet. # The range the filter covers.
+            # All indexes are zero-based.
+            # Indexes are half open, e.g the start index is inclusive
+            # and the end index is exclusive -- [start_index, end_index).
+            # Missing indexes indicate the range is unbounded on that side.
+            #
+            # For example, if `"Sheet1"` is sheet ID 0, then:
+            #
+            #   `Sheet1!A1:A1 == sheet_id: 0,
+            #                   start_row_index: 0, end_row_index: 1,
+            #                   start_column_index: 0, end_column_index: 1`
+            #
+            #   `Sheet1!A3:B4 == sheet_id: 0,
+            #                   start_row_index: 2, end_row_index: 4,
+            #                   start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A:B == sheet_id: 0,
+            #                 start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A5:B == sheet_id: 0,
+            #                  start_row_index: 4,
+            #                  start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1 == sheet_id:0`
+            #
+            # The start index must always be less than or equal to the end index.
+            # If the start index equals the end index, then the range is empty.
+            # Empty ranges are typically not meaningful and are usually rendered in the
+            # UI as `#REF!`.
+          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+          "sheetId": 42, # The sheet this range is on.
+          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+        },
+        "sortSpecs": [ # The sort order per column. Later specifications are used when values
+            # are equal in the earlier specifications.
+          { # A sort order associated with a specific column or row.
+            "sortOrder": "A String", # The order data should be sorted.
+            "dimensionIndex": 42, # The dimension the sort should be applied to.
+          },
+        ],
+        "criteria": { # The criteria for showing/hiding values per column.
+            # The map's key is the column index, and the value is the criteria for
+            # that column.
+          "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
+            "hiddenValues": [ # Values that should be hidden.
+              "A String",
+            ],
+            "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                # (This does not override hiddenValues -- if a value is listed there,
+                #  it will still be hidden.)
+                # BooleanConditions are used by conditional formatting,
+                # data validation, and the criteria in filters.
+              "type": "A String", # The type of condition.
+              "values": [ # The values of the condition. The number of supported values depends
+                  # on the condition type.  Some support zero values,
+                  # others one or two values,
+                  # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                { # The value of the condition.
+                  "relativeDate": "A String", # A relative date (based on the current date).
+                      # Valid only if the type is
+                      # DATE_BEFORE,
+                      # DATE_AFTER,
+                      # DATE_ON_OR_BEFORE or
+                      # DATE_ON_OR_AFTER.
+                      #
+                      # Relative dates are not supported in data validation.
+                      # They are supported only in conditional formatting and
+                      # conditional filters.
+                  "userEnteredValue": "A String", # A value the condition is based on.
+                      # The value will be parsed as if the user typed into a cell.
+                      # Formulas are supported (and must begin with an `=`).
+                },
+              ],
+            },
+          },
+        },
+      },
+      "charts": [ # The specifications of every chart on this sheet.
+        { # A chart embedded in a sheet.
+          "chartId": 42, # The ID of the chart.
+          "position": { # The position of an embedded object such as a chart. # The position of the chart.
+            "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                # is chosen for you. Used only when writing.
+            "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                # is on its own sheet. Must be non-negative.
+            "overlayPosition": { # The location an object is overlaid on top of a grid. # The position at which the object is overlaid on top of a grid.
+              "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                  # All indexes are zero-based.
+                "rowIndex": 42, # The row index of the coordinate.
+                "columnIndex": 42, # The column index of the coordinate.
+                "sheetId": 42, # The sheet this coordinate is on.
+              },
+              "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+              "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+            },
+          },
+          "spec": { # The specifications of a chart. # The specification of the chart.
+            "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+            "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+              "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                  "sources": [ # The ranges of data for a series or domain.
+                      # Exactly one dimension must have a length of 1,
+                      # and all sources in the list must have the same dimension
+                      # with length 1.
+                      # The domain (if it exists) & all series must have the same number
+                      # of source ranges. If using more than one source range, then the source
+                      # range at a given offset must be contiguous across the domain and series.
+                      #
+                      # For example, these are valid configurations:
+                      #
+                      #     domain sources: A1:A5
+                      #     series1 sources: B1:B5
+                      #     series2 sources: D6:D10
+                      #
+                      #     domain sources: A1:A5, C10:C12
+                      #     series1 sources: B1:B5, D10:D12
+                      #     series2 sources: C1:C5, E10:E12
+                    { # A range on a sheet.
+                        # All indexes are zero-based.
+                        # Indexes are half open, e.g the start index is inclusive
+                        # and the end index is exclusive -- [start_index, end_index).
+                        # Missing indexes indicate the range is unbounded on that side.
+                        #
+                        # For example, if `"Sheet1"` is sheet ID 0, then:
+                        #
+                        #   `Sheet1!A1:A1 == sheet_id: 0,
+                        #                   start_row_index: 0, end_row_index: 1,
+                        #                   start_column_index: 0, end_column_index: 1`
+                        #
+                        #   `Sheet1!A3:B4 == sheet_id: 0,
+                        #                   start_row_index: 2, end_row_index: 4,
+                        #                   start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A:B == sheet_id: 0,
+                        #                 start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A5:B == sheet_id: 0,
+                        #                  start_row_index: 4,
+                        #                  start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1 == sheet_id:0`
+                        #
+                        # The start index must always be less than or equal to the end index.
+                        # If the start index equals the end index, then the range is empty.
+                        # Empty ranges are typically not meaningful and are usually rendered in the
+                        # UI as `#REF!`.
+                      "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                      "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                      "sheetId": 42, # The sheet this range is on.
+                      "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                  ],
+                },
+              },
+              "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                  "sources": [ # The ranges of data for a series or domain.
+                      # Exactly one dimension must have a length of 1,
+                      # and all sources in the list must have the same dimension
+                      # with length 1.
+                      # The domain (if it exists) & all series must have the same number
+                      # of source ranges. If using more than one source range, then the source
+                      # range at a given offset must be contiguous across the domain and series.
+                      #
+                      # For example, these are valid configurations:
+                      #
+                      #     domain sources: A1:A5
+                      #     series1 sources: B1:B5
+                      #     series2 sources: D6:D10
+                      #
+                      #     domain sources: A1:A5, C10:C12
+                      #     series1 sources: B1:B5, D10:D12
+                      #     series2 sources: C1:C5, E10:E12
+                    { # A range on a sheet.
+                        # All indexes are zero-based.
+                        # Indexes are half open, e.g the start index is inclusive
+                        # and the end index is exclusive -- [start_index, end_index).
+                        # Missing indexes indicate the range is unbounded on that side.
+                        #
+                        # For example, if `"Sheet1"` is sheet ID 0, then:
+                        #
+                        #   `Sheet1!A1:A1 == sheet_id: 0,
+                        #                   start_row_index: 0, end_row_index: 1,
+                        #                   start_column_index: 0, end_column_index: 1`
+                        #
+                        #   `Sheet1!A3:B4 == sheet_id: 0,
+                        #                   start_row_index: 2, end_row_index: 4,
+                        #                   start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A:B == sheet_id: 0,
+                        #                 start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A5:B == sheet_id: 0,
+                        #                  start_row_index: 4,
+                        #                  start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1 == sheet_id:0`
+                        #
+                        # The start index must always be less than or equal to the end index.
+                        # If the start index equals the end index, then the range is empty.
+                        # Empty ranges are typically not meaningful and are usually rendered in the
+                        # UI as `#REF!`.
+                      "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                      "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                      "sheetId": 42, # The sheet this range is on.
+                      "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                  ],
+                },
+              },
+              "threeDimensional": True or False, # True if the pie is three dimensional.
+              "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+              "pieHole": 3.14, # The size of the hole in the pie chart.
+            },
+            "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                # See BasicChartType for the list of all
+                # charts this supports.
+                # of charts this supports.
+              "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                  # If not set, Google Sheets will guess how many rows are headers based
+                  # on the data.
+                  #
+                  # (Note that BasicChartAxis.title may override the axis title
+                  #  inferred from the header values.)
+              "series": [ # The data this chart is visualizing.
+                { # A single series of data in a chart.
+                    # For example, if charting stock prices over time, multiple series may exist,
+                    # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                  "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # All indexes are zero-based.
+                            # Indexes are half open, e.g the start index is inclusive
+                            # and the end index is exclusive -- [start_index, end_index).
+                            # Missing indexes indicate the range is unbounded on that side.
+                            #
+                            # For example, if `"Sheet1"` is sheet ID 0, then:
+                            #
+                            #   `Sheet1!A1:A1 == sheet_id: 0,
+                            #                   start_row_index: 0, end_row_index: 1,
+                            #                   start_column_index: 0, end_column_index: 1`
+                            #
+                            #   `Sheet1!A3:B4 == sheet_id: 0,
+                            #                   start_row_index: 2, end_row_index: 4,
+                            #                   start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A:B == sheet_id: 0,
+                            #                 start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A5:B == sheet_id: 0,
+                            #                  start_row_index: 4,
+                            #                  start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1 == sheet_id:0`
+                            #
+                            # The start index must always be less than or equal to the end index.
+                            # If the start index equals the end index, then the range is empty.
+                            # Empty ranges are typically not meaningful and are usually rendered in the
+                            # UI as `#REF!`.
+                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                          "sheetId": 42, # The sheet this range is on.
+                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                      # For example, if charting stocks over time, the "Volume" series
+                      # may want to be pinned to the right with the prices pinned to the left,
+                      # because the scale of trading volume is different than the scale of
+                      # prices.
+                      # It is an error to specify an axis that isn't a valid minor axis
+                      # for the chart's type.
+                  "type": "A String", # The type of this series. Valid only if the
+                      # chartType is
+                      # COMBO.
+                      # Different types will change the way the series is visualized.
+                      # Only LINE, AREA,
+                      # and COLUMN are supported.
+                },
+              ],
+              "legendPosition": "A String", # The position of the chart legend.
+              "domains": [ # The domain of data this is charting.
+                  # Only a single domain is currently supported.
+                { # The domain of a chart.
+                    # For example, if charting stock prices over time, this would be the date.
+                  "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                      # this is the data representing the dates.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # All indexes are zero-based.
+                            # Indexes are half open, e.g the start index is inclusive
+                            # and the end index is exclusive -- [start_index, end_index).
+                            # Missing indexes indicate the range is unbounded on that side.
+                            #
+                            # For example, if `"Sheet1"` is sheet ID 0, then:
+                            #
+                            #   `Sheet1!A1:A1 == sheet_id: 0,
+                            #                   start_row_index: 0, end_row_index: 1,
+                            #                   start_column_index: 0, end_column_index: 1`
+                            #
+                            #   `Sheet1!A3:B4 == sheet_id: 0,
+                            #                   start_row_index: 2, end_row_index: 4,
+                            #                   start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A:B == sheet_id: 0,
+                            #                 start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1!A5:B == sheet_id: 0,
+                            #                  start_row_index: 4,
+                            #                  start_column_index: 0, end_column_index: 2`
+                            #
+                            #   `Sheet1 == sheet_id:0`
+                            #
+                            # The start index must always be less than or equal to the end index.
+                            # If the start index equals the end index, then the range is empty.
+                            # Empty ranges are typically not meaningful and are usually rendered in the
+                            # UI as `#REF!`.
+                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                          "sheetId": 42, # The sheet this range is on.
+                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "chartType": "A String", # The type of the chart.
+              "axis": [ # The axis on the chart.
+                { # An axis of the chart.
+                    # A chart may not have more than one axis per
+                    # axis position.
+                  "position": "A String", # The position of this axis.
+                  "format": { # The format of a run of text in a cell. # The format of the title.
+                      # Only valid if the axis is not associated with the domain.
+                      # Absent values indicate that the field isn't specified.
+                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "bold": True or False, # True if the text is bold.
+                    "strikethrough": True or False, # True if the text has a strikethrough.
+                    "fontFamily": "A String", # The font family.
+                    "fontSize": 42, # The size of the font.
+                    "italic": True or False, # True if the text is italicized.
+                    "underline": True or False, # True if the text is underlined.
+                  },
+                  "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                      # from headers of the data.
+                },
+              ],
+            },
+            "title": "A String", # The title of the chart.
+          },
+        },
+      ],
+      "filterViews": [ # The filter views in this sheet.
+        { # A filter view.
+          "title": "A String", # The name of the filter view.
+          "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+              #
+              # When writing, only one of range or named_range_id
+              # may be set.
+          "filterViewId": 42, # The ID of the filter view.
+          "range": { # A range on a sheet. # The range this filter view covers.
+              #
+              # When writing, only one of range or named_range_id
+              # may be set.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "sortSpecs": [ # The sort order per column. Later specifications are used when values
+              # are equal in the earlier specifications.
+            { # A sort order associated with a specific column or row.
+              "sortOrder": "A String", # The order data should be sorted.
+              "dimensionIndex": 42, # The dimension the sort should be applied to.
+            },
+          ],
+          "criteria": { # The criteria for showing/hiding values per column.
+              # The map's key is the column index, and the value is the criteria for
+              # that column.
+            "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
+              "hiddenValues": [ # Values that should be hidden.
+                "A String",
+              ],
+              "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                  # (This does not override hiddenValues -- if a value is listed there,
+                  #  it will still be hidden.)
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+            },
+          },
+        },
+      ],
+      "protectedRanges": [ # The protected ranges in this sheet.
+        { # A protected range.
+          "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+              # Unprotected ranges are only supported on protected sheets.
+            { # A range on a sheet.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          ],
+          "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+              # protected area.
+              # This field is read-only.
+          "description": "A String", # The description of this protected range.
+          "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+              #
+              # When writing, only one of range or named_range_id
+              # may be set.
+          "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+              # This field is only visible to users with edit access to the protected
+              # range and the document.
+              # Editors are not supported with warning_only protection.
+            "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                # range.  Domain protection is only supported on documents within a domain.
+            "users": [ # The email addresses of users with edit access to the protected range.
+              "A String",
+            ],
+            "groups": [ # The email addresses of groups with edit access to the protected range.
+              "A String",
+            ],
+          },
+          "protectedRangeId": 42, # The ID of the protected range.
+              # This field is read-only.
+          "warningOnly": True or False, # True if this protected range will show a warning when editing.
+              # Warning-based protection means that every user can edit data in the
+              # protected range, except editing will prompt a warning asking the user
+              # to confirm the edit.
+              #
+              # When writing: if this field is true, then editors is ignored.
+              # Additionally, if this field is changed from true to false and the
+              # `editors` field is not set (nor included in the field mask), then
+              # the editors will be set to all the editors in the document.
+          "range": { # A range on a sheet. # The range that is being protected.
+              # The range may be fully unbounded, in which case this is considered
+              # a protected sheet.
+              #
+              # When writing, only one of range or named_range_id
+              # may be set.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+        },
+      ],
+      "data": [ # Data in the grid, if this is a grid sheet.
+          # The number of GridData objects returned is dependent on the number of
+          # ranges requested on this sheet. For example, if this is representing
+          # `Sheet1`, and the spreadsheet was requested with ranges
+          # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+          # startRow/startColumn of `0`,
+          # while the second one will have `startRow 14` (zero-based row 15),
+          # and `startColumn 3` (zero-based column D).
+        { # Data in the grid, as well as metadata about the dimensions.
+          "startRow": 42, # The first row this GridData refers to, zero-based.
+          "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+              # in start_row.
+            { # Properties about a dimension.
+              "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+              "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+              "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                  # This field is read-only.
+            },
+          ],
+          "startColumn": 42, # The first column this GridData refers to, zero-based.
+          "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+              # in start_column.
+            { # Properties about a dimension.
+              "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+              "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+              "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                  # This field is read-only.
+            },
+          ],
+          "rowData": [ # The data in the grid, one entry per row,
+              # starting with the row in startRow.
+              # The values in RowData will correspond to columns starting
+              # at start_column.
+            { # Data about each cell in a row.
+              "values": [ # The values in the row, one per column.
+                { # Data about a specific cell.
+                  "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                      # is computed dynamically based on its data, grouping, filters, values,
+                      # etc. Only the top-left cell of the pivot table contains the pivot table
+                      # definition. The other cells will contain the calculated values of the
+                      # results of the pivot in their effective_value fields.
+                    "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                        # or vertically (as rows).
+                    "rows": [ # Each row grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                    "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                        # All indexes are zero-based.
+                        # Indexes are half open, e.g the start index is inclusive
+                        # and the end index is exclusive -- [start_index, end_index).
+                        # Missing indexes indicate the range is unbounded on that side.
+                        #
+                        # For example, if `"Sheet1"` is sheet ID 0, then:
+                        #
+                        #   `Sheet1!A1:A1 == sheet_id: 0,
+                        #                   start_row_index: 0, end_row_index: 1,
+                        #                   start_column_index: 0, end_column_index: 1`
+                        #
+                        #   `Sheet1!A3:B4 == sheet_id: 0,
+                        #                   start_row_index: 2, end_row_index: 4,
+                        #                   start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A:B == sheet_id: 0,
+                        #                 start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1!A5:B == sheet_id: 0,
+                        #                  start_row_index: 4,
+                        #                  start_column_index: 0, end_column_index: 2`
+                        #
+                        #   `Sheet1 == sheet_id:0`
+                        #
+                        # The start index must always be less than or equal to the end index.
+                        # If the start index equals the end index, then the range is empty.
+                        # Empty ranges are typically not meaningful and are usually rendered in the
+                        # UI as `#REF!`.
+                      "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                      "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                      "sheetId": 42, # The sheet this range is on.
+                      "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                    "values": [ # A list of values to include in the pivot table.
+                      { # The definition of how a value in a pivot table should be calculated.
+                        "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                            # with an `=` character.
+                        "summarizeFunction": "A String", # A function to summarize the value.
+                            # If formula is set, the only supported values are
+                            # SUM and
+                            # CUSTOM.
+                            # If sourceColumnOffset is set, then `CUSTOM`
+                            # is not supported.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                            #
+                            # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                            # means this value refers to column `C`, whereas the offset `1` would
+                            # refer to column `D`.
+                        "name": "A String", # A name to use for the value. This is only used if formula was set.
+                            # Otherwise, the column name is used.
+                      },
+                    ],
+                    "criteria": { # An optional mapping of filters per source column offset.
+                        #
+                        # The filters will be applied before aggregating data into the pivot table.
+                        # The map's key is the column offset of the source range that you want to
+                        # filter, and the value is the criteria for that column.
+                        #
+                        # For example, if the source was `C10:E15`, a key of `0` will have the filter
+                        # for column `C`, whereas the key `1` is for column `D`.
+                      "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                        "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                          "A String",
+                        ],
+                      },
+                    },
+                    "columns": [ # Each column grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                  },
+                  "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                      # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                  "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                      # the calculated value.  For cells with literals, this will be
+                      # the same as the user_entered_value.
+                      # This field is read-only.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "formattedValue": "A String", # The formatted value of the cell.
+                      # This is the value as it's shown to the user.
+                      # This field is read-only.
+                  "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                      # Note: Dates, Times and DateTimes are represented as doubles in
+                      # serial number format.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "note": "A String", # Any note on the cell.
+                  "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                      # This includes the results of applying any conditional formatting and,
+                      # if the cell contains a formula, the computed number format.
+                      # If the effective format is the default format, effective format will
+                      # not be written.
+                      # This field is read-only.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                      "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                          # the user's locale will be used if necessary for the given type.
+                          # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                          # information about the supported patterns.
+                      "type": "A String", # The type of the number format.
+                          # When writing, this field must be set.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                      #
+                      # When writing, the new format will be merged with the existing format.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                      "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                          # the user's locale will be used if necessary for the given type.
+                          # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                          # information about the supported patterns.
+                      "type": "A String", # The type of the number format.
+                          # When writing, this field must be set.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Deprecated; the width is determined by the "style" field.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                      #
+                      # When writing, the new data validation rule will overwrite any prior rule.
+                    "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                        # If true, "List" conditions will show a dropdown.
+                    "strict": True or False, # True if invalid data should be rejected.
+                    "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                    "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                        # BooleanConditions are used by conditional formatting,
+                        # data validation, and the criteria in filters.
+                      "type": "A String", # The type of condition.
+                      "values": [ # The values of the condition. The number of supported values depends
+                          # on the condition type.  Some support zero values,
+                          # others one or two values,
+                          # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                        { # The value of the condition.
+                          "relativeDate": "A String", # A relative date (based on the current date).
+                              # Valid only if the type is
+                              # DATE_BEFORE,
+                              # DATE_AFTER,
+                              # DATE_ON_OR_BEFORE or
+                              # DATE_ON_OR_AFTER.
+                              #
+                              # Relative dates are not supported in data validation.
+                              # They are supported only in conditional formatting and
+                              # conditional filters.
+                          "userEnteredValue": "A String", # A value the condition is based on.
+                              # The value will be parsed as if the user typed into a cell.
+                              # Formulas are supported (and must begin with an `=`).
+                        },
+                      ],
+                    },
+                  },
+                  "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.  Runs are only valid
+                      # on user entered strings, not formulas, bools, or numbers.
+                      # Runs start at specific indexes in the text and continue until the next
+                      # run. Properties of a run will continue unless explicitly changed
+                      # in a subsequent run (and properties of the first run will continue
+                      # the properties of the cell unless explicitly changed).
+                      #
+                      # When writing, the new runs will overwrite any prior runs.  When writing a
+                      # new user_entered_value, previous runs will be erased.
+                    { # A run of a text format. The format of this run continues until the start
+                        # index of the next run.
+                        # When updating, all fields must be set.
+                      "startIndex": 42, # The character index where this run starts.
+                      "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      "properties": { # Properties of a sheet. # The properties of the sheet.
+        "sheetType": "A String", # The type of sheet. Defaults to GRID.
+            # This field cannot be changed once set.
+        "index": 42, # The index of the sheet within the spreadsheet.
+            # When adding or updating sheet properties, if this field
+            # is excluded then the sheet will be added or moved to the end
+            # of the sheet list. When updating sheet indices or inserting
+            # sheets, movement is considered in "before the move" indexes.
+            # For example, if there were 3 sheets (S1, S2, S3) in order to
+            # move S1 ahead of S2 the index would have to be set to 2. A sheet
+            # index update request will be ignored if the requested index is
+            # identical to the sheets current index or if the requested new
+            # index is equal to the current sheet index + 1.
+        "title": "A String", # The name of the sheet.
+        "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+            # (If the sheet is an object sheet, containing a chart or image, then
+            # this field will be absent.)
+            # When writing it is an error to set any grid properties on non-grid sheets.
+          "columnCount": 42, # The number of columns in the grid.
+          "rowCount": 42, # The number of rows in the grid.
+          "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+          "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+          "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+        },
+        "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+        "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+            # for simplicity of conversion to/from color representations in various
+            # languages over compactness; for example, the fields of this representation
+            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+            # method in iOS; and, with just a little work, it can be easily formatted into
+            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+            #
+            # Example (Java):
+            #
+            #      import com.google.type.Color;
+            #
+            #      // ...
+            #      public static java.awt.Color fromProto(Color protocolor) {
+            #        float alpha = protocolor.hasAlpha()
+            #            ? protocolor.getAlpha().getValue()
+            #            : 1.0;
+            #
+            #        return new java.awt.Color(
+            #            protocolor.getRed(),
+            #            protocolor.getGreen(),
+            #            protocolor.getBlue(),
+            #            alpha);
+            #      }
+            #
+            #      public static Color toProto(java.awt.Color color) {
+            #        float red = (float) color.getRed();
+            #        float green = (float) color.getGreen();
+            #        float blue = (float) color.getBlue();
+            #        float denominator = 255.0;
+            #        Color.Builder resultBuilder =
+            #            Color
+            #                .newBuilder()
+            #                .setRed(red / denominator)
+            #                .setGreen(green / denominator)
+            #                .setBlue(blue / denominator);
+            #        int alpha = color.getAlpha();
+            #        if (alpha != 255) {
+            #          result.setAlpha(
+            #              FloatValue
+            #                  .newBuilder()
+            #                  .setValue(((float) alpha) / denominator)
+            #                  .build());
+            #        }
+            #        return resultBuilder.build();
+            #      }
+            #      // ...
+            #
+            # Example (iOS / Obj-C):
+            #
+            #      // ...
+            #      static UIColor* fromProto(Color* protocolor) {
+            #         float red = [protocolor red];
+            #         float green = [protocolor green];
+            #         float blue = [protocolor blue];
+            #         FloatValue* alpha_wrapper = [protocolor alpha];
+            #         float alpha = 1.0;
+            #         if (alpha_wrapper != nil) {
+            #           alpha = [alpha_wrapper value];
+            #         }
+            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+            #      }
+            #
+            #      static Color* toProto(UIColor* color) {
+            #          CGFloat red, green, blue, alpha;
+            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+            #            return nil;
+            #          }
+            #          Color* result = [Color alloc] init];
+            #          [result setRed:red];
+            #          [result setGreen:green];
+            #          [result setBlue:blue];
+            #          if (alpha <= 0.9999) {
+            #            [result setAlpha:floatWrapperWithValue(alpha)];
+            #          }
+            #          [result autorelease];
+            #          return result;
+            #     }
+            #     // ...
+            #
+            #  Example (JavaScript):
+            #
+            #     // ...
+            #
+            #     var protoToCssColor = function(rgb_color) {
+            #        var redFrac = rgb_color.red || 0.0;
+            #        var greenFrac = rgb_color.green || 0.0;
+            #        var blueFrac = rgb_color.blue || 0.0;
+            #        var red = Math.floor(redFrac * 255);
+            #        var green = Math.floor(greenFrac * 255);
+            #        var blue = Math.floor(blueFrac * 255);
+            #
+            #        if (!('alpha' in rgb_color)) {
+            #           return rgbToCssColor_(red, green, blue);
+            #        }
+            #
+            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+            #        var rgbParams = [red, green, blue].join(',');
+            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+            #     };
+            #
+            #     var rgbToCssColor_ = function(red, green, blue) {
+            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+            #       var hexString = rgbNumber.toString(16);
+            #       var missingZeros = 6 - hexString.length;
+            #       var resultBuilder = ['#'];
+            #       for (var i = 0; i < missingZeros; i++) {
+            #          resultBuilder.push('0');
+            #       }
+            #       resultBuilder.push(hexString);
+            #       return resultBuilder.join('');
+            #     };
+            #
+            #     // ...
+          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+              # the final pixel color is defined by the equation:
+              #
+              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+              #
+              # This means that a value of 1.0 corresponds to a solid color, whereas
+              # a value of 0.0 corresponds to a completely transparent color. This
+              # uses a wrapper message rather than a simple float scalar so that it is
+              # possible to distinguish between a default value and the value being unset.
+              # If omitted, this color object is to be rendered as a solid color
+              # (as if the alpha value had been explicitly given with a value of 1.0).
+          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+        },
+        "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+        "sheetId": 42, # The ID of the sheet. Must be non-negative.
+            # This field cannot be changed once set.
+      },
+    },
+  ],
+  "spreadsheetUrl": "A String", # The url of the spreadsheet.
+      # This field is read-only.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Resource that represents a spreadsheet.
     "spreadsheetId": "A String", # The ID of the spreadsheet.
         # This field is read-only.
     "namedRanges": [ # The named ranges defined in a spreadsheet.
@@ -20697,6 +36924,1126 @@
             },
           },
         ],
+        "bandedRanges": [ # The banded (i.e. alternating colors) ranges on this sheet.
+          { # A banded (alternating colors) range in a sheet.
+            "range": { # A range on a sheet. # The range over which these properties are applied.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                # by-column basis throughout all the columns in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                # basis throughout all the rows in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "bandedRangeId": 42, # The id of the banded range.
+          },
+        ],
         "merges": [ # The ranges that are merged together.
           { # A range on a sheet.
               # All indexes are zero-based.
@@ -23618,7 +40965,13 @@
           "index": 42, # The index of the sheet within the spreadsheet.
               # When adding or updating sheet properties, if this field
               # is excluded then the sheet will be added or moved to the end
-              # of the sheet list.
+              # of the sheet list. When updating sheet indices or inserting
+              # sheets, movement is considered in "before the move" indexes.
+              # For example, if there were 3 sheets (S1, S2, S3) in order to
+              # move S1 ahead of S2 the index would have to be set to 2. A sheet
+              # index update request will be ignored if the requested index is
+              # identical to the sheets current index or if the requested new
+              # index is equal to the current sheet index + 1.
           "title": "A String", # The name of the sheet.
           "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
               # (If the sheet is an object sheet, containing a chart or image, then
@@ -23766,5296 +41119,9 @@
         },
       },
     ],
-  }
-
-  x__xgafv: string, V1 error format.
-    Allowed values
-      1 - v1 error format
-      2 - v2 error format
-
-Returns:
-  An object of the form:
-
-    { # Resource that represents a spreadsheet.
-      "spreadsheetId": "A String", # The ID of the spreadsheet.
-          # This field is read-only.
-      "namedRanges": [ # The named ranges defined in a spreadsheet.
-        { # A named range.
-          "namedRangeId": "A String", # The ID of the named range.
-          "range": { # A range on a sheet. # The range this represents.
-              # All indexes are zero-based.
-              # Indexes are half open, e.g the start index is inclusive
-              # and the end index is exclusive -- [start_index, end_index).
-              # Missing indexes indicate the range is unbounded on that side.
-              #
-              # For example, if `"Sheet1"` is sheet ID 0, then:
-              #
-              #   `Sheet1!A1:A1 == sheet_id: 0,
-              #                   start_row_index: 0, end_row_index: 1,
-              #                   start_column_index: 0, end_column_index: 1`
-              #
-              #   `Sheet1!A3:B4 == sheet_id: 0,
-              #                   start_row_index: 2, end_row_index: 4,
-              #                   start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1!A:B == sheet_id: 0,
-              #                 start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1!A5:B == sheet_id: 0,
-              #                  start_row_index: 4,
-              #                  start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1 == sheet_id:0`
-              #
-              # The start index must always be less than or equal to the end index.
-              # If the start index equals the end index, then the range is empty.
-              # Empty ranges are typically not meaningful and are usually rendered in the
-              # UI as `#REF!`.
-            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-            "sheetId": 42, # The sheet this range is on.
-            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-          },
-          "name": "A String", # The name of the named range.
-        },
-      ],
-      "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
-        "locale": "A String", # The locale of the spreadsheet in one of the following formats:
-            #
-            # * an ISO 639-1 language code such as `en`
-            #
-            # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
-            #
-            # * a combination of the ISO language code and country code, such as `en_US`
-            #
-            # Note: when updating this field, not all locales/languages are supported.
-        "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
-            # `America/New_York`. If the time zone isn't recognized, this may
-            # be a custom time zone such as `GMT-07:00`.
-        "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
-        "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
-            # CellData.effectiveFormat will not be set if the
-            # cell's format is equal to this default format.
-            # This field is read-only.
-          "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-            "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                # the user's locale will be used if necessary for the given type.
-                # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                # information about the supported patterns.
-            "type": "A String", # The type of the number format.
-                # When writing, this field must be set.
-          },
-          "textDirection": "A String", # The direction of the text in the cell.
-          "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-              # When updating padding, every field must be specified.
-            "top": 42, # The top padding of the cell.
-            "right": 42, # The right padding of the cell.
-            "bottom": 42, # The bottom padding of the cell.
-            "left": 42, # The left padding of the cell.
-          },
-          "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-          "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-              # for simplicity of conversion to/from color representations in various
-              # languages over compactness; for example, the fields of this representation
-              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-              # method in iOS; and, with just a little work, it can be easily formatted into
-              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-              #
-              # Example (Java):
-              #
-              #      import com.google.type.Color;
-              #
-              #      // ...
-              #      public static java.awt.Color fromProto(Color protocolor) {
-              #        float alpha = protocolor.hasAlpha()
-              #            ? protocolor.getAlpha().getValue()
-              #            : 1.0;
-              #
-              #        return new java.awt.Color(
-              #            protocolor.getRed(),
-              #            protocolor.getGreen(),
-              #            protocolor.getBlue(),
-              #            alpha);
-              #      }
-              #
-              #      public static Color toProto(java.awt.Color color) {
-              #        float red = (float) color.getRed();
-              #        float green = (float) color.getGreen();
-              #        float blue = (float) color.getBlue();
-              #        float denominator = 255.0;
-              #        Color.Builder resultBuilder =
-              #            Color
-              #                .newBuilder()
-              #                .setRed(red / denominator)
-              #                .setGreen(green / denominator)
-              #                .setBlue(blue / denominator);
-              #        int alpha = color.getAlpha();
-              #        if (alpha != 255) {
-              #          result.setAlpha(
-              #              FloatValue
-              #                  .newBuilder()
-              #                  .setValue(((float) alpha) / denominator)
-              #                  .build());
-              #        }
-              #        return resultBuilder.build();
-              #      }
-              #      // ...
-              #
-              # Example (iOS / Obj-C):
-              #
-              #      // ...
-              #      static UIColor* fromProto(Color* protocolor) {
-              #         float red = [protocolor red];
-              #         float green = [protocolor green];
-              #         float blue = [protocolor blue];
-              #         FloatValue* alpha_wrapper = [protocolor alpha];
-              #         float alpha = 1.0;
-              #         if (alpha_wrapper != nil) {
-              #           alpha = [alpha_wrapper value];
-              #         }
-              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-              #      }
-              #
-              #      static Color* toProto(UIColor* color) {
-              #          CGFloat red, green, blue, alpha;
-              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-              #            return nil;
-              #          }
-              #          Color* result = [Color alloc] init];
-              #          [result setRed:red];
-              #          [result setGreen:green];
-              #          [result setBlue:blue];
-              #          if (alpha <= 0.9999) {
-              #            [result setAlpha:floatWrapperWithValue(alpha)];
-              #          }
-              #          [result autorelease];
-              #          return result;
-              #     }
-              #     // ...
-              #
-              #  Example (JavaScript):
-              #
-              #     // ...
-              #
-              #     var protoToCssColor = function(rgb_color) {
-              #        var redFrac = rgb_color.red || 0.0;
-              #        var greenFrac = rgb_color.green || 0.0;
-              #        var blueFrac = rgb_color.blue || 0.0;
-              #        var red = Math.floor(redFrac * 255);
-              #        var green = Math.floor(greenFrac * 255);
-              #        var blue = Math.floor(blueFrac * 255);
-              #
-              #        if (!('alpha' in rgb_color)) {
-              #           return rgbToCssColor_(red, green, blue);
-              #        }
-              #
-              #        var alphaFrac = rgb_color.alpha.value || 0.0;
-              #        var rgbParams = [red, green, blue].join(',');
-              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-              #     };
-              #
-              #     var rgbToCssColor_ = function(red, green, blue) {
-              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-              #       var hexString = rgbNumber.toString(16);
-              #       var missingZeros = 6 - hexString.length;
-              #       var resultBuilder = ['#'];
-              #       for (var i = 0; i < missingZeros; i++) {
-              #          resultBuilder.push('0');
-              #       }
-              #       resultBuilder.push(hexString);
-              #       return resultBuilder.join('');
-              #     };
-              #
-              #     // ...
-            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                # the final pixel color is defined by the equation:
-                #
-                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                #
-                # This means that a value of 1.0 corresponds to a solid color, whereas
-                # a value of 0.0 corresponds to a completely transparent color. This
-                # uses a wrapper message rather than a simple float scalar so that it is
-                # possible to distinguish between a default value and the value being unset.
-                # If omitted, this color object is to be rendered as a solid color
-                # (as if the alpha value had been explicitly given with a value of 1.0).
-            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-          },
-          "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-          "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-              # Absent values indicate that the field isn't specified.
-            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                # for simplicity of conversion to/from color representations in various
-                # languages over compactness; for example, the fields of this representation
-                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                # method in iOS; and, with just a little work, it can be easily formatted into
-                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                #
-                # Example (Java):
-                #
-                #      import com.google.type.Color;
-                #
-                #      // ...
-                #      public static java.awt.Color fromProto(Color protocolor) {
-                #        float alpha = protocolor.hasAlpha()
-                #            ? protocolor.getAlpha().getValue()
-                #            : 1.0;
-                #
-                #        return new java.awt.Color(
-                #            protocolor.getRed(),
-                #            protocolor.getGreen(),
-                #            protocolor.getBlue(),
-                #            alpha);
-                #      }
-                #
-                #      public static Color toProto(java.awt.Color color) {
-                #        float red = (float) color.getRed();
-                #        float green = (float) color.getGreen();
-                #        float blue = (float) color.getBlue();
-                #        float denominator = 255.0;
-                #        Color.Builder resultBuilder =
-                #            Color
-                #                .newBuilder()
-                #                .setRed(red / denominator)
-                #                .setGreen(green / denominator)
-                #                .setBlue(blue / denominator);
-                #        int alpha = color.getAlpha();
-                #        if (alpha != 255) {
-                #          result.setAlpha(
-                #              FloatValue
-                #                  .newBuilder()
-                #                  .setValue(((float) alpha) / denominator)
-                #                  .build());
-                #        }
-                #        return resultBuilder.build();
-                #      }
-                #      // ...
-                #
-                # Example (iOS / Obj-C):
-                #
-                #      // ...
-                #      static UIColor* fromProto(Color* protocolor) {
-                #         float red = [protocolor red];
-                #         float green = [protocolor green];
-                #         float blue = [protocolor blue];
-                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                #         float alpha = 1.0;
-                #         if (alpha_wrapper != nil) {
-                #           alpha = [alpha_wrapper value];
-                #         }
-                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                #      }
-                #
-                #      static Color* toProto(UIColor* color) {
-                #          CGFloat red, green, blue, alpha;
-                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                #            return nil;
-                #          }
-                #          Color* result = [Color alloc] init];
-                #          [result setRed:red];
-                #          [result setGreen:green];
-                #          [result setBlue:blue];
-                #          if (alpha <= 0.9999) {
-                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                #          }
-                #          [result autorelease];
-                #          return result;
-                #     }
-                #     // ...
-                #
-                #  Example (JavaScript):
-                #
-                #     // ...
-                #
-                #     var protoToCssColor = function(rgb_color) {
-                #        var redFrac = rgb_color.red || 0.0;
-                #        var greenFrac = rgb_color.green || 0.0;
-                #        var blueFrac = rgb_color.blue || 0.0;
-                #        var red = Math.floor(redFrac * 255);
-                #        var green = Math.floor(greenFrac * 255);
-                #        var blue = Math.floor(blueFrac * 255);
-                #
-                #        if (!('alpha' in rgb_color)) {
-                #           return rgbToCssColor_(red, green, blue);
-                #        }
-                #
-                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                #        var rgbParams = [red, green, blue].join(',');
-                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                #     };
-                #
-                #     var rgbToCssColor_ = function(red, green, blue) {
-                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                #       var hexString = rgbNumber.toString(16);
-                #       var missingZeros = 6 - hexString.length;
-                #       var resultBuilder = ['#'];
-                #       for (var i = 0; i < missingZeros; i++) {
-                #          resultBuilder.push('0');
-                #       }
-                #       resultBuilder.push(hexString);
-                #       return resultBuilder.join('');
-                #     };
-                #
-                #     // ...
-              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                  # the final pixel color is defined by the equation:
-                  #
-                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                  #
-                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                  # a value of 0.0 corresponds to a completely transparent color. This
-                  # uses a wrapper message rather than a simple float scalar so that it is
-                  # possible to distinguish between a default value and the value being unset.
-                  # If omitted, this color object is to be rendered as a solid color
-                  # (as if the alpha value had been explicitly given with a value of 1.0).
-              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-            },
-            "bold": True or False, # True if the text is bold.
-            "strikethrough": True or False, # True if the text has a strikethrough.
-            "fontFamily": "A String", # The font family.
-            "fontSize": 42, # The size of the font.
-            "italic": True or False, # True if the text is italicized.
-            "underline": True or False, # True if the text is underlined.
-          },
-          "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-          "borders": { # The borders of the cell. # The borders of the cell.
-            "top": { # A border along a cell. # The top border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-            "right": { # A border along a cell. # The right border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-            "bottom": { # A border along a cell. # The bottom border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-            "left": { # A border along a cell. # The left border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-          },
-          "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-        },
-        "title": "A String", # The title of the spreadsheet.
-      },
-      "sheets": [ # The sheets that are part of a spreadsheet.
-        { # A sheet in a spreadsheet.
-          "conditionalFormats": [ # The conditional format rules in this sheet.
-            { # A rule describing a conditional format.
-              "ranges": [ # The ranges that will be formatted if the condition is true.
-                  # All the ranges must be on the same grid.
-                { # A range on a sheet.
-                    # All indexes are zero-based.
-                    # Indexes are half open, e.g the start index is inclusive
-                    # and the end index is exclusive -- [start_index, end_index).
-                    # Missing indexes indicate the range is unbounded on that side.
-                    #
-                    # For example, if `"Sheet1"` is sheet ID 0, then:
-                    #
-                    #   `Sheet1!A1:A1 == sheet_id: 0,
-                    #                   start_row_index: 0, end_row_index: 1,
-                    #                   start_column_index: 0, end_column_index: 1`
-                    #
-                    #   `Sheet1!A3:B4 == sheet_id: 0,
-                    #                   start_row_index: 2, end_row_index: 4,
-                    #                   start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A:B == sheet_id: 0,
-                    #                 start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A5:B == sheet_id: 0,
-                    #                  start_row_index: 4,
-                    #                  start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1 == sheet_id:0`
-                    #
-                    # The start index must always be less than or equal to the end index.
-                    # If the start index equals the end index, then the range is empty.
-                    # Empty ranges are typically not meaningful and are usually rendered in the
-                    # UI as `#REF!`.
-                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                  "sheetId": 42, # The sheet this range is on.
-                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                },
-              ],
-              "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
-                "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
-                    # the format will be applied.
-                    # BooleanConditions are used by conditional formatting,
-                    # data validation, and the criteria in filters.
-                  "type": "A String", # The type of condition.
-                  "values": [ # The values of the condition. The number of supported values depends
-                      # on the condition type.  Some support zero values,
-                      # others one or two values,
-                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                    { # The value of the condition.
-                      "relativeDate": "A String", # A relative date (based on the current date).
-                          # Valid only if the type is
-                          # DATE_BEFORE,
-                          # DATE_AFTER,
-                          # DATE_ON_OR_BEFORE or
-                          # DATE_ON_OR_AFTER.
-                          #
-                          # Relative dates are not supported in data validation.
-                          # They are supported only in conditional formatting and
-                          # conditional filters.
-                      "userEnteredValue": "A String", # A value the condition is based on.
-                          # The value will be parsed as if the user typed into a cell.
-                          # Formulas are supported (and must begin with an `=`).
-                    },
-                  ],
-                },
-                "format": { # The format of a cell. # The format to apply.
-                    # Conditional formatting can only apply a subset of formatting:
-                    # bold, italic,
-                    # strikethrough,
-                    # foreground color &
-                    # background color.
-                  "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                    "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                        # the user's locale will be used if necessary for the given type.
-                        # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                        # information about the supported patterns.
-                    "type": "A String", # The type of the number format.
-                        # When writing, this field must be set.
-                  },
-                  "textDirection": "A String", # The direction of the text in the cell.
-                  "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                      # When updating padding, every field must be specified.
-                    "top": 42, # The top padding of the cell.
-                    "right": 42, # The right padding of the cell.
-                    "bottom": 42, # The bottom padding of the cell.
-                    "left": 42, # The left padding of the cell.
-                  },
-                  "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                  "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                  "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                      # Absent values indicate that the field isn't specified.
-                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                        # for simplicity of conversion to/from color representations in various
-                        # languages over compactness; for example, the fields of this representation
-                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                        # method in iOS; and, with just a little work, it can be easily formatted into
-                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                        #
-                        # Example (Java):
-                        #
-                        #      import com.google.type.Color;
-                        #
-                        #      // ...
-                        #      public static java.awt.Color fromProto(Color protocolor) {
-                        #        float alpha = protocolor.hasAlpha()
-                        #            ? protocolor.getAlpha().getValue()
-                        #            : 1.0;
-                        #
-                        #        return new java.awt.Color(
-                        #            protocolor.getRed(),
-                        #            protocolor.getGreen(),
-                        #            protocolor.getBlue(),
-                        #            alpha);
-                        #      }
-                        #
-                        #      public static Color toProto(java.awt.Color color) {
-                        #        float red = (float) color.getRed();
-                        #        float green = (float) color.getGreen();
-                        #        float blue = (float) color.getBlue();
-                        #        float denominator = 255.0;
-                        #        Color.Builder resultBuilder =
-                        #            Color
-                        #                .newBuilder()
-                        #                .setRed(red / denominator)
-                        #                .setGreen(green / denominator)
-                        #                .setBlue(blue / denominator);
-                        #        int alpha = color.getAlpha();
-                        #        if (alpha != 255) {
-                        #          result.setAlpha(
-                        #              FloatValue
-                        #                  .newBuilder()
-                        #                  .setValue(((float) alpha) / denominator)
-                        #                  .build());
-                        #        }
-                        #        return resultBuilder.build();
-                        #      }
-                        #      // ...
-                        #
-                        # Example (iOS / Obj-C):
-                        #
-                        #      // ...
-                        #      static UIColor* fromProto(Color* protocolor) {
-                        #         float red = [protocolor red];
-                        #         float green = [protocolor green];
-                        #         float blue = [protocolor blue];
-                        #         FloatValue* alpha_wrapper = [protocolor alpha];
-                        #         float alpha = 1.0;
-                        #         if (alpha_wrapper != nil) {
-                        #           alpha = [alpha_wrapper value];
-                        #         }
-                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                        #      }
-                        #
-                        #      static Color* toProto(UIColor* color) {
-                        #          CGFloat red, green, blue, alpha;
-                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                        #            return nil;
-                        #          }
-                        #          Color* result = [Color alloc] init];
-                        #          [result setRed:red];
-                        #          [result setGreen:green];
-                        #          [result setBlue:blue];
-                        #          if (alpha <= 0.9999) {
-                        #            [result setAlpha:floatWrapperWithValue(alpha)];
-                        #          }
-                        #          [result autorelease];
-                        #          return result;
-                        #     }
-                        #     // ...
-                        #
-                        #  Example (JavaScript):
-                        #
-                        #     // ...
-                        #
-                        #     var protoToCssColor = function(rgb_color) {
-                        #        var redFrac = rgb_color.red || 0.0;
-                        #        var greenFrac = rgb_color.green || 0.0;
-                        #        var blueFrac = rgb_color.blue || 0.0;
-                        #        var red = Math.floor(redFrac * 255);
-                        #        var green = Math.floor(greenFrac * 255);
-                        #        var blue = Math.floor(blueFrac * 255);
-                        #
-                        #        if (!('alpha' in rgb_color)) {
-                        #           return rgbToCssColor_(red, green, blue);
-                        #        }
-                        #
-                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                        #        var rgbParams = [red, green, blue].join(',');
-                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                        #     };
-                        #
-                        #     var rgbToCssColor_ = function(red, green, blue) {
-                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                        #       var hexString = rgbNumber.toString(16);
-                        #       var missingZeros = 6 - hexString.length;
-                        #       var resultBuilder = ['#'];
-                        #       for (var i = 0; i < missingZeros; i++) {
-                        #          resultBuilder.push('0');
-                        #       }
-                        #       resultBuilder.push(hexString);
-                        #       return resultBuilder.join('');
-                        #     };
-                        #
-                        #     // ...
-                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                          # the final pixel color is defined by the equation:
-                          #
-                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                          #
-                          # This means that a value of 1.0 corresponds to a solid color, whereas
-                          # a value of 0.0 corresponds to a completely transparent color. This
-                          # uses a wrapper message rather than a simple float scalar so that it is
-                          # possible to distinguish between a default value and the value being unset.
-                          # If omitted, this color object is to be rendered as a solid color
-                          # (as if the alpha value had been explicitly given with a value of 1.0).
-                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                    },
-                    "bold": True or False, # True if the text is bold.
-                    "strikethrough": True or False, # True if the text has a strikethrough.
-                    "fontFamily": "A String", # The font family.
-                    "fontSize": 42, # The size of the font.
-                    "italic": True or False, # True if the text is italicized.
-                    "underline": True or False, # True if the text is underlined.
-                  },
-                  "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                  "borders": { # The borders of the cell. # The borders of the cell.
-                    "top": { # A border along a cell. # The top border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                          #
-                          # Example (Java):
-                          #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
-                    },
-                    "right": { # A border along a cell. # The right border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                          #
-                          # Example (Java):
-                          #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
-                    },
-                    "bottom": { # A border along a cell. # The bottom border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                          #
-                          # Example (Java):
-                          #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
-                    },
-                    "left": { # A border along a cell. # The left border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                          #
-                          # Example (Java):
-                          #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
-                    },
-                  },
-                  "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-                },
-              },
-              "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
-                  # the interpolation points listed. The format of a cell will vary
-                  # based on its contents as compared to the values of the interpolation
-                  # points.
-                "maxpoint": { # A single interpolation point on a gradient conditional format. # The final interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
-                "midpoint": { # A single interpolation point on a gradient conditional format. # An optional midway interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
-                "minpoint": { # A single interpolation point on a gradient conditional format. # The starting interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
-              },
-            },
-          ],
-          "merges": [ # The ranges that are merged together.
-            { # A range on a sheet.
-                # All indexes are zero-based.
-                # Indexes are half open, e.g the start index is inclusive
-                # and the end index is exclusive -- [start_index, end_index).
-                # Missing indexes indicate the range is unbounded on that side.
-                #
-                # For example, if `"Sheet1"` is sheet ID 0, then:
-                #
-                #   `Sheet1!A1:A1 == sheet_id: 0,
-                #                   start_row_index: 0, end_row_index: 1,
-                #                   start_column_index: 0, end_column_index: 1`
-                #
-                #   `Sheet1!A3:B4 == sheet_id: 0,
-                #                   start_row_index: 2, end_row_index: 4,
-                #                   start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1!A:B == sheet_id: 0,
-                #                 start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1!A5:B == sheet_id: 0,
-                #                  start_row_index: 4,
-                #                  start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1 == sheet_id:0`
-                #
-                # The start index must always be less than or equal to the end index.
-                # If the start index equals the end index, then the range is empty.
-                # Empty ranges are typically not meaningful and are usually rendered in the
-                # UI as `#REF!`.
-              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-              "sheetId": 42, # The sheet this range is on.
-              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-            },
-          ],
-          "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
-            "range": { # A range on a sheet. # The range the filter covers.
-                # All indexes are zero-based.
-                # Indexes are half open, e.g the start index is inclusive
-                # and the end index is exclusive -- [start_index, end_index).
-                # Missing indexes indicate the range is unbounded on that side.
-                #
-                # For example, if `"Sheet1"` is sheet ID 0, then:
-                #
-                #   `Sheet1!A1:A1 == sheet_id: 0,
-                #                   start_row_index: 0, end_row_index: 1,
-                #                   start_column_index: 0, end_column_index: 1`
-                #
-                #   `Sheet1!A3:B4 == sheet_id: 0,
-                #                   start_row_index: 2, end_row_index: 4,
-                #                   start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1!A:B == sheet_id: 0,
-                #                 start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1!A5:B == sheet_id: 0,
-                #                  start_row_index: 4,
-                #                  start_column_index: 0, end_column_index: 2`
-                #
-                #   `Sheet1 == sheet_id:0`
-                #
-                # The start index must always be less than or equal to the end index.
-                # If the start index equals the end index, then the range is empty.
-                # Empty ranges are typically not meaningful and are usually rendered in the
-                # UI as `#REF!`.
-              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-              "sheetId": 42, # The sheet this range is on.
-              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-            },
-            "sortSpecs": [ # The sort order per column. Later specifications are used when values
-                # are equal in the earlier specifications.
-              { # A sort order associated with a specific column or row.
-                "sortOrder": "A String", # The order data should be sorted.
-                "dimensionIndex": 42, # The dimension the sort should be applied to.
-              },
-            ],
-            "criteria": { # The criteria for showing/hiding values per column.
-                # The map's key is the column index, and the value is the criteria for
-                # that column.
-              "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
-                "hiddenValues": [ # Values that should be hidden.
-                  "A String",
-                ],
-                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
-                    # (This does not override hiddenValues -- if a value is listed there,
-                    #  it will still be hidden.)
-                    # BooleanConditions are used by conditional formatting,
-                    # data validation, and the criteria in filters.
-                  "type": "A String", # The type of condition.
-                  "values": [ # The values of the condition. The number of supported values depends
-                      # on the condition type.  Some support zero values,
-                      # others one or two values,
-                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                    { # The value of the condition.
-                      "relativeDate": "A String", # A relative date (based on the current date).
-                          # Valid only if the type is
-                          # DATE_BEFORE,
-                          # DATE_AFTER,
-                          # DATE_ON_OR_BEFORE or
-                          # DATE_ON_OR_AFTER.
-                          #
-                          # Relative dates are not supported in data validation.
-                          # They are supported only in conditional formatting and
-                          # conditional filters.
-                      "userEnteredValue": "A String", # A value the condition is based on.
-                          # The value will be parsed as if the user typed into a cell.
-                          # Formulas are supported (and must begin with an `=`).
-                    },
-                  ],
-                },
-              },
-            },
-          },
-          "charts": [ # The specifications of every chart on this sheet.
-            { # A chart embedded in a sheet.
-              "chartId": 42, # The ID of the chart.
-              "position": { # The position of an embedded object such as a chart. # The position of the chart.
-                "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
-                    # is chosen for you. Used only when writing.
-                "sheetId": 42, # The sheet this is on. Set only if the embedded object
-                    # is on its own sheet. Must be non-negative.
-                "overlayPosition": { # The location an object is overlaid on top of a grid. # The position at which the object is overlaid on top of a grid.
-                  "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
-                      # All indexes are zero-based.
-                    "rowIndex": 42, # The row index of the coordinate.
-                    "columnIndex": 42, # The column index of the coordinate.
-                    "sheetId": 42, # The sheet this coordinate is on.
-                  },
-                  "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
-                      # from the anchor cell.
-                  "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
-                  "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
-                      # from the anchor cell.
-                  "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
-                },
-              },
-              "spec": { # The specifications of a chart. # The specification of the chart.
-                "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
-                "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
-                  "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
-                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                      "sources": [ # The ranges of data for a series or domain.
-                          # Exactly one dimension must have a length of 1,
-                          # and all sources in the list must have the same dimension
-                          # with length 1.
-                          # The domain (if it exists) & all series must have the same number
-                          # of source ranges. If using more than one source range, then the source
-                          # range at a given offset must be contiguous across the domain and series.
-                          #
-                          # For example, these are valid configurations:
-                          #
-                          #     domain sources: A1:A5
-                          #     series1 sources: B1:B5
-                          #     series2 sources: D6:D10
-                          #
-                          #     domain sources: A1:A5, C10:C12
-                          #     series1 sources: B1:B5, D10:D12
-                          #     series2 sources: C1:C5, E10:E12
-                        { # A range on a sheet.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                      ],
-                    },
-                  },
-                  "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
-                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                      "sources": [ # The ranges of data for a series or domain.
-                          # Exactly one dimension must have a length of 1,
-                          # and all sources in the list must have the same dimension
-                          # with length 1.
-                          # The domain (if it exists) & all series must have the same number
-                          # of source ranges. If using more than one source range, then the source
-                          # range at a given offset must be contiguous across the domain and series.
-                          #
-                          # For example, these are valid configurations:
-                          #
-                          #     domain sources: A1:A5
-                          #     series1 sources: B1:B5
-                          #     series2 sources: D6:D10
-                          #
-                          #     domain sources: A1:A5, C10:C12
-                          #     series1 sources: B1:B5, D10:D12
-                          #     series2 sources: C1:C5, E10:E12
-                        { # A range on a sheet.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                      ],
-                    },
-                  },
-                  "threeDimensional": True or False, # True if the pie is three dimensional.
-                  "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
-                  "pieHole": 3.14, # The size of the hole in the pie chart.
-                },
-                "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
-                    # See BasicChartType for the list of all
-                    # charts this supports.
-                    # of charts this supports.
-                  "headerCount": 42, # The number of rows or columns in the data that are "headers".
-                      # If not set, Google Sheets will guess how many rows are headers based
-                      # on the data.
-                      #
-                      # (Note that BasicChartAxis.title may override the axis title
-                      #  inferred from the header values.)
-                  "series": [ # The data this chart is visualizing.
-                    { # A single series of data in a chart.
-                        # For example, if charting stock prices over time, multiple series may exist,
-                        # one for the "Open Price", "High Price", "Low Price" and "Close Price".
-                      "series": { # The data included in a domain or series. # The data being visualized in this chart series.
-                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                          "sources": [ # The ranges of data for a series or domain.
-                              # Exactly one dimension must have a length of 1,
-                              # and all sources in the list must have the same dimension
-                              # with length 1.
-                              # The domain (if it exists) & all series must have the same number
-                              # of source ranges. If using more than one source range, then the source
-                              # range at a given offset must be contiguous across the domain and series.
-                              #
-                              # For example, these are valid configurations:
-                              #
-                              #     domain sources: A1:A5
-                              #     series1 sources: B1:B5
-                              #     series2 sources: D6:D10
-                              #
-                              #     domain sources: A1:A5, C10:C12
-                              #     series1 sources: B1:B5, D10:D12
-                              #     series2 sources: C1:C5, E10:E12
-                            { # A range on a sheet.
-                                # All indexes are zero-based.
-                                # Indexes are half open, e.g the start index is inclusive
-                                # and the end index is exclusive -- [start_index, end_index).
-                                # Missing indexes indicate the range is unbounded on that side.
-                                #
-                                # For example, if `"Sheet1"` is sheet ID 0, then:
-                                #
-                                #   `Sheet1!A1:A1 == sheet_id: 0,
-                                #                   start_row_index: 0, end_row_index: 1,
-                                #                   start_column_index: 0, end_column_index: 1`
-                                #
-                                #   `Sheet1!A3:B4 == sheet_id: 0,
-                                #                   start_row_index: 2, end_row_index: 4,
-                                #                   start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A:B == sheet_id: 0,
-                                #                 start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A5:B == sheet_id: 0,
-                                #                  start_row_index: 4,
-                                #                  start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1 == sheet_id:0`
-                                #
-                                # The start index must always be less than or equal to the end index.
-                                # If the start index equals the end index, then the range is empty.
-                                # Empty ranges are typically not meaningful and are usually rendered in the
-                                # UI as `#REF!`.
-                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                              "sheetId": 42, # The sheet this range is on.
-                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                            },
-                          ],
-                        },
-                      },
-                      "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
-                          # For example, if charting stocks over time, the "Volume" series
-                          # may want to be pinned to the right with the prices pinned to the left,
-                          # because the scale of trading volume is different than the scale of
-                          # prices.
-                          # It is an error to specify an axis that isn't a valid minor axis
-                          # for the chart's type.
-                      "type": "A String", # The type of this series. Valid only if the
-                          # chartType is
-                          # COMBO.
-                          # Different types will change the way the series is visualized.
-                          # Only LINE, AREA,
-                          # and COLUMN are supported.
-                    },
-                  ],
-                  "legendPosition": "A String", # The position of the chart legend.
-                  "domains": [ # The domain of data this is charting.
-                      # Only a single domain is currently supported.
-                    { # The domain of a chart.
-                        # For example, if charting stock prices over time, this would be the date.
-                      "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
-                          # this is the data representing the dates.
-                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                          "sources": [ # The ranges of data for a series or domain.
-                              # Exactly one dimension must have a length of 1,
-                              # and all sources in the list must have the same dimension
-                              # with length 1.
-                              # The domain (if it exists) & all series must have the same number
-                              # of source ranges. If using more than one source range, then the source
-                              # range at a given offset must be contiguous across the domain and series.
-                              #
-                              # For example, these are valid configurations:
-                              #
-                              #     domain sources: A1:A5
-                              #     series1 sources: B1:B5
-                              #     series2 sources: D6:D10
-                              #
-                              #     domain sources: A1:A5, C10:C12
-                              #     series1 sources: B1:B5, D10:D12
-                              #     series2 sources: C1:C5, E10:E12
-                            { # A range on a sheet.
-                                # All indexes are zero-based.
-                                # Indexes are half open, e.g the start index is inclusive
-                                # and the end index is exclusive -- [start_index, end_index).
-                                # Missing indexes indicate the range is unbounded on that side.
-                                #
-                                # For example, if `"Sheet1"` is sheet ID 0, then:
-                                #
-                                #   `Sheet1!A1:A1 == sheet_id: 0,
-                                #                   start_row_index: 0, end_row_index: 1,
-                                #                   start_column_index: 0, end_column_index: 1`
-                                #
-                                #   `Sheet1!A3:B4 == sheet_id: 0,
-                                #                   start_row_index: 2, end_row_index: 4,
-                                #                   start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A:B == sheet_id: 0,
-                                #                 start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A5:B == sheet_id: 0,
-                                #                  start_row_index: 4,
-                                #                  start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1 == sheet_id:0`
-                                #
-                                # The start index must always be less than or equal to the end index.
-                                # If the start index equals the end index, then the range is empty.
-                                # Empty ranges are typically not meaningful and are usually rendered in the
-                                # UI as `#REF!`.
-                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                              "sheetId": 42, # The sheet this range is on.
-                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                            },
-                          ],
-                        },
-                      },
-                    },
-                  ],
-                  "chartType": "A String", # The type of the chart.
-                  "axis": [ # The axis on the chart.
-                    { # An axis of the chart.
-                        # A chart may not have more than one axis per
-                        # axis position.
-                      "position": "A String", # The position of this axis.
-                      "format": { # The format of a run of text in a cell. # The format of the title.
-                          # Only valid if the axis is not associated with the domain.
-                          # Absent values indicate that the field isn't specified.
-                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                            # for simplicity of conversion to/from color representations in various
-                            # languages over compactness; for example, the fields of this representation
-                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                            # method in iOS; and, with just a little work, it can be easily formatted into
-                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                            #
-                            # Example (Java):
-                            #
-                            #      import com.google.type.Color;
-                            #
-                            #      // ...
-                            #      public static java.awt.Color fromProto(Color protocolor) {
-                            #        float alpha = protocolor.hasAlpha()
-                            #            ? protocolor.getAlpha().getValue()
-                            #            : 1.0;
-                            #
-                            #        return new java.awt.Color(
-                            #            protocolor.getRed(),
-                            #            protocolor.getGreen(),
-                            #            protocolor.getBlue(),
-                            #            alpha);
-                            #      }
-                            #
-                            #      public static Color toProto(java.awt.Color color) {
-                            #        float red = (float) color.getRed();
-                            #        float green = (float) color.getGreen();
-                            #        float blue = (float) color.getBlue();
-                            #        float denominator = 255.0;
-                            #        Color.Builder resultBuilder =
-                            #            Color
-                            #                .newBuilder()
-                            #                .setRed(red / denominator)
-                            #                .setGreen(green / denominator)
-                            #                .setBlue(blue / denominator);
-                            #        int alpha = color.getAlpha();
-                            #        if (alpha != 255) {
-                            #          result.setAlpha(
-                            #              FloatValue
-                            #                  .newBuilder()
-                            #                  .setValue(((float) alpha) / denominator)
-                            #                  .build());
-                            #        }
-                            #        return resultBuilder.build();
-                            #      }
-                            #      // ...
-                            #
-                            # Example (iOS / Obj-C):
-                            #
-                            #      // ...
-                            #      static UIColor* fromProto(Color* protocolor) {
-                            #         float red = [protocolor red];
-                            #         float green = [protocolor green];
-                            #         float blue = [protocolor blue];
-                            #         FloatValue* alpha_wrapper = [protocolor alpha];
-                            #         float alpha = 1.0;
-                            #         if (alpha_wrapper != nil) {
-                            #           alpha = [alpha_wrapper value];
-                            #         }
-                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                            #      }
-                            #
-                            #      static Color* toProto(UIColor* color) {
-                            #          CGFloat red, green, blue, alpha;
-                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                            #            return nil;
-                            #          }
-                            #          Color* result = [Color alloc] init];
-                            #          [result setRed:red];
-                            #          [result setGreen:green];
-                            #          [result setBlue:blue];
-                            #          if (alpha <= 0.9999) {
-                            #            [result setAlpha:floatWrapperWithValue(alpha)];
-                            #          }
-                            #          [result autorelease];
-                            #          return result;
-                            #     }
-                            #     // ...
-                            #
-                            #  Example (JavaScript):
-                            #
-                            #     // ...
-                            #
-                            #     var protoToCssColor = function(rgb_color) {
-                            #        var redFrac = rgb_color.red || 0.0;
-                            #        var greenFrac = rgb_color.green || 0.0;
-                            #        var blueFrac = rgb_color.blue || 0.0;
-                            #        var red = Math.floor(redFrac * 255);
-                            #        var green = Math.floor(greenFrac * 255);
-                            #        var blue = Math.floor(blueFrac * 255);
-                            #
-                            #        if (!('alpha' in rgb_color)) {
-                            #           return rgbToCssColor_(red, green, blue);
-                            #        }
-                            #
-                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                            #        var rgbParams = [red, green, blue].join(',');
-                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                            #     };
-                            #
-                            #     var rgbToCssColor_ = function(red, green, blue) {
-                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                            #       var hexString = rgbNumber.toString(16);
-                            #       var missingZeros = 6 - hexString.length;
-                            #       var resultBuilder = ['#'];
-                            #       for (var i = 0; i < missingZeros; i++) {
-                            #          resultBuilder.push('0');
-                            #       }
-                            #       resultBuilder.push(hexString);
-                            #       return resultBuilder.join('');
-                            #     };
-                            #
-                            #     // ...
-                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                              # the final pixel color is defined by the equation:
-                              #
-                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                              #
-                              # This means that a value of 1.0 corresponds to a solid color, whereas
-                              # a value of 0.0 corresponds to a completely transparent color. This
-                              # uses a wrapper message rather than a simple float scalar so that it is
-                              # possible to distinguish between a default value and the value being unset.
-                              # If omitted, this color object is to be rendered as a solid color
-                              # (as if the alpha value had been explicitly given with a value of 1.0).
-                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                        },
-                        "bold": True or False, # True if the text is bold.
-                        "strikethrough": True or False, # True if the text has a strikethrough.
-                        "fontFamily": "A String", # The font family.
-                        "fontSize": 42, # The size of the font.
-                        "italic": True or False, # True if the text is italicized.
-                        "underline": True or False, # True if the text is underlined.
-                      },
-                      "title": "A String", # The title of this axis. If set, this overrides any title inferred
-                          # from headers of the data.
-                    },
-                  ],
-                },
-                "title": "A String", # The title of the chart.
-              },
-            },
-          ],
-          "filterViews": [ # The filter views in this sheet.
-            { # A filter view.
-              "title": "A String", # The name of the filter view.
-              "namedRangeId": "A String", # The named range this filter view is backed by, if any.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-              "filterViewId": 42, # The ID of the filter view.
-              "range": { # A range on a sheet. # The range this filter view covers.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-                  # All indexes are zero-based.
-                  # Indexes are half open, e.g the start index is inclusive
-                  # and the end index is exclusive -- [start_index, end_index).
-                  # Missing indexes indicate the range is unbounded on that side.
-                  #
-                  # For example, if `"Sheet1"` is sheet ID 0, then:
-                  #
-                  #   `Sheet1!A1:A1 == sheet_id: 0,
-                  #                   start_row_index: 0, end_row_index: 1,
-                  #                   start_column_index: 0, end_column_index: 1`
-                  #
-                  #   `Sheet1!A3:B4 == sheet_id: 0,
-                  #                   start_row_index: 2, end_row_index: 4,
-                  #                   start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A:B == sheet_id: 0,
-                  #                 start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A5:B == sheet_id: 0,
-                  #                  start_row_index: 4,
-                  #                  start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1 == sheet_id:0`
-                  #
-                  # The start index must always be less than or equal to the end index.
-                  # If the start index equals the end index, then the range is empty.
-                  # Empty ranges are typically not meaningful and are usually rendered in the
-                  # UI as `#REF!`.
-                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                "sheetId": 42, # The sheet this range is on.
-                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-              },
-              "sortSpecs": [ # The sort order per column. Later specifications are used when values
-                  # are equal in the earlier specifications.
-                { # A sort order associated with a specific column or row.
-                  "sortOrder": "A String", # The order data should be sorted.
-                  "dimensionIndex": 42, # The dimension the sort should be applied to.
-                },
-              ],
-              "criteria": { # The criteria for showing/hiding values per column.
-                  # The map's key is the column index, and the value is the criteria for
-                  # that column.
-                "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
-                  "hiddenValues": [ # Values that should be hidden.
-                    "A String",
-                  ],
-                  "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
-                      # (This does not override hiddenValues -- if a value is listed there,
-                      #  it will still be hidden.)
-                      # BooleanConditions are used by conditional formatting,
-                      # data validation, and the criteria in filters.
-                    "type": "A String", # The type of condition.
-                    "values": [ # The values of the condition. The number of supported values depends
-                        # on the condition type.  Some support zero values,
-                        # others one or two values,
-                        # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                      { # The value of the condition.
-                        "relativeDate": "A String", # A relative date (based on the current date).
-                            # Valid only if the type is
-                            # DATE_BEFORE,
-                            # DATE_AFTER,
-                            # DATE_ON_OR_BEFORE or
-                            # DATE_ON_OR_AFTER.
-                            #
-                            # Relative dates are not supported in data validation.
-                            # They are supported only in conditional formatting and
-                            # conditional filters.
-                        "userEnteredValue": "A String", # A value the condition is based on.
-                            # The value will be parsed as if the user typed into a cell.
-                            # Formulas are supported (and must begin with an `=`).
-                      },
-                    ],
-                  },
-                },
-              },
-            },
-          ],
-          "protectedRanges": [ # The protected ranges in this sheet.
-            { # A protected range.
-              "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
-                  # Unprotected ranges are only supported on protected sheets.
-                { # A range on a sheet.
-                    # All indexes are zero-based.
-                    # Indexes are half open, e.g the start index is inclusive
-                    # and the end index is exclusive -- [start_index, end_index).
-                    # Missing indexes indicate the range is unbounded on that side.
-                    #
-                    # For example, if `"Sheet1"` is sheet ID 0, then:
-                    #
-                    #   `Sheet1!A1:A1 == sheet_id: 0,
-                    #                   start_row_index: 0, end_row_index: 1,
-                    #                   start_column_index: 0, end_column_index: 1`
-                    #
-                    #   `Sheet1!A3:B4 == sheet_id: 0,
-                    #                   start_row_index: 2, end_row_index: 4,
-                    #                   start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A:B == sheet_id: 0,
-                    #                 start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A5:B == sheet_id: 0,
-                    #                  start_row_index: 4,
-                    #                  start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1 == sheet_id:0`
-                    #
-                    # The start index must always be less than or equal to the end index.
-                    # If the start index equals the end index, then the range is empty.
-                    # Empty ranges are typically not meaningful and are usually rendered in the
-                    # UI as `#REF!`.
-                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                  "sheetId": 42, # The sheet this range is on.
-                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                },
-              ],
-              "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
-                  # protected area.
-                  # This field is read-only.
-              "description": "A String", # The description of this protected range.
-              "namedRangeId": "A String", # The named range this protected range is backed by, if any.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-              "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
-                  # This field is only visible to users with edit access to the protected
-                  # range and the document.
-                  # Editors are not supported with warning_only protection.
-                "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
-                    # range.  Domain protection is only supported on documents within a domain.
-                "users": [ # The email addresses of users with edit access to the protected range.
-                  "A String",
-                ],
-                "groups": [ # The email addresses of groups with edit access to the protected range.
-                  "A String",
-                ],
-              },
-              "protectedRangeId": 42, # The ID of the protected range.
-                  # This field is read-only.
-              "warningOnly": True or False, # True if this protected range will show a warning when editing.
-                  # Warning-based protection means that every user can edit data in the
-                  # protected range, except editing will prompt a warning asking the user
-                  # to confirm the edit.
-                  #
-                  # When writing: if this field is true, then editors is ignored.
-                  # Additionally, if this field is changed from true to false and the
-                  # `editors` field is not set (nor included in the field mask), then
-                  # the editors will be set to all the editors in the document.
-              "range": { # A range on a sheet. # The range that is being protected.
-                  # The range may be fully unbounded, in which case this is considered
-                  # a protected sheet.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-                  # All indexes are zero-based.
-                  # Indexes are half open, e.g the start index is inclusive
-                  # and the end index is exclusive -- [start_index, end_index).
-                  # Missing indexes indicate the range is unbounded on that side.
-                  #
-                  # For example, if `"Sheet1"` is sheet ID 0, then:
-                  #
-                  #   `Sheet1!A1:A1 == sheet_id: 0,
-                  #                   start_row_index: 0, end_row_index: 1,
-                  #                   start_column_index: 0, end_column_index: 1`
-                  #
-                  #   `Sheet1!A3:B4 == sheet_id: 0,
-                  #                   start_row_index: 2, end_row_index: 4,
-                  #                   start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A:B == sheet_id: 0,
-                  #                 start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A5:B == sheet_id: 0,
-                  #                  start_row_index: 4,
-                  #                  start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1 == sheet_id:0`
-                  #
-                  # The start index must always be less than or equal to the end index.
-                  # If the start index equals the end index, then the range is empty.
-                  # Empty ranges are typically not meaningful and are usually rendered in the
-                  # UI as `#REF!`.
-                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                "sheetId": 42, # The sheet this range is on.
-                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-              },
-            },
-          ],
-          "data": [ # Data in the grid, if this is a grid sheet.
-              # The number of GridData objects returned is dependent on the number of
-              # ranges requested on this sheet. For example, if this is representing
-              # `Sheet1`, and the spreadsheet was requested with ranges
-              # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
-              # startRow/startColumn of `0`,
-              # while the second one will have `startRow 14` (zero-based row 15),
-              # and `startColumn 3` (zero-based column D).
-            { # Data in the grid, as well as metadata about the dimensions.
-              "startRow": 42, # The first row this GridData refers to, zero-based.
-              "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
-                  # in start_row.
-                { # Properties about a dimension.
-                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
-                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
-                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
-                      # This field is read-only.
-                },
-              ],
-              "startColumn": 42, # The first column this GridData refers to, zero-based.
-              "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
-                  # in start_column.
-                { # Properties about a dimension.
-                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
-                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
-                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
-                      # This field is read-only.
-                },
-              ],
-              "rowData": [ # The data in the grid, one entry per row,
-                  # starting with the row in startRow.
-                  # The values in RowData will correspond to columns starting
-                  # at start_column.
-                { # Data about each cell in a row.
-                  "values": [ # The values in the row, one per column.
-                    { # Data about a specific cell.
-                      "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
-                          # is computed dynamically based on its data, grouping, filters, values,
-                          # etc. Only the top-left cell of the pivot table contains the pivot table
-                          # definition. The other cells will contain the calculated values of the
-                          # results of the pivot in their effective_value fields.
-                        "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
-                            # or vertically (as rows).
-                        "rows": [ # Each row grouping in the pivot table.
-                          { # A single grouping (either row or column) in a pivot table.
-                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
-                            "valueMetadata": [ # Metadata about values in the grouping.
-                              { # Metadata about a value in a pivot grouping.
-                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
-                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
-                                    # (Note that formulaValue is not valid,
-                                    #  because the values will be calculated.)
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              },
-                            ],
-                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
-                                # If not specified, sorting is alphabetical by this group's values.
-                              "buckets": [ # Determines the bucket from which values are chosen to sort.
-                                  #
-                                  # For example, in a pivot table with one row group & two column groups,
-                                  # the row group can list up to two values. The first value corresponds
-                                  # to a value within the first column group, and the second value
-                                  # corresponds to a value in the second column group.  If no values
-                                  # are listed, this would indicate that the row should be sorted according
-                                  # to the "Grand Total" over the column groups. If a single value is listed,
-                                  # this would correspond to using the "Total" of that bucket.
-                                { # The kinds of value that a cell in a spreadsheet can have.
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              ],
-                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
-                                  # grouping should be sorted by.
-                            },
-                            "sortOrder": "A String", # The order the values in this group should be sorted.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this group refers to column `C`, whereas the offset `1` would refer
-                                # to column `D`.
-                          },
-                        ],
-                        "source": { # A range on a sheet. # The range the pivot table is reading data from.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                        "values": [ # A list of values to include in the pivot table.
-                          { # The definition of how a value in a pivot table should be calculated.
-                            "formula": "A String", # A custom formula to calculate the value.  The formula must start
-                                # with an `=` character.
-                            "summarizeFunction": "A String", # A function to summarize the value.
-                                # If formula is set, the only supported values are
-                                # SUM and
-                                # CUSTOM.
-                                # If sourceColumnOffset is set, then `CUSTOM`
-                                # is not supported.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this value refers to column `C`, whereas the offset `1` would
-                                # refer to column `D`.
-                            "name": "A String", # A name to use for the value. This is only used if formula was set.
-                                # Otherwise, the column name is used.
-                          },
-                        ],
-                        "criteria": { # An optional mapping of filters per source column offset.
-                            #
-                            # The filters will be applied before aggregating data into the pivot table.
-                            # The map's key is the column offset of the source range that you want to
-                            # filter, and the value is the criteria for that column.
-                            #
-                            # For example, if the source was `C10:E15`, a key of `0` will have the filter
-                            # for column `C`, whereas the key `1` is for column `D`.
-                          "a_key": { # Criteria for showing/hiding rows in a pivot table.
-                            "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
-                              "A String",
-                            ],
-                          },
-                        },
-                        "columns": [ # Each column grouping in the pivot table.
-                          { # A single grouping (either row or column) in a pivot table.
-                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
-                            "valueMetadata": [ # Metadata about values in the grouping.
-                              { # Metadata about a value in a pivot grouping.
-                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
-                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
-                                    # (Note that formulaValue is not valid,
-                                    #  because the values will be calculated.)
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              },
-                            ],
-                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
-                                # If not specified, sorting is alphabetical by this group's values.
-                              "buckets": [ # Determines the bucket from which values are chosen to sort.
-                                  #
-                                  # For example, in a pivot table with one row group & two column groups,
-                                  # the row group can list up to two values. The first value corresponds
-                                  # to a value within the first column group, and the second value
-                                  # corresponds to a value in the second column group.  If no values
-                                  # are listed, this would indicate that the row should be sorted according
-                                  # to the "Grand Total" over the column groups. If a single value is listed,
-                                  # this would correspond to using the "Total" of that bucket.
-                                { # The kinds of value that a cell in a spreadsheet can have.
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              ],
-                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
-                                  # grouping should be sorted by.
-                            },
-                            "sortOrder": "A String", # The order the values in this group should be sorted.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this group refers to column `C`, whereas the offset `1` would refer
-                                # to column `D`.
-                          },
-                        ],
-                      },
-                      "hyperlink": "A String", # A hyperlink this cell points to, if any.
-                          # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
-                      "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
-                          # the calculated value.  For cells with literals, this will be
-                          # the same as the user_entered_value.
-                          # This field is read-only.
-                        "numberValue": 3.14, # Represents a double value.
-                            # Note: Dates, Times and DateTimes are represented as doubles in
-                            # "serial number" format.
-                        "boolValue": True or False, # Represents a boolean value.
-                        "formulaValue": "A String", # Represents a formula.
-                        "stringValue": "A String", # Represents a string value.
-                            # Leading single quotes are not included. For example, if the user typed
-                            # `'123` into the UI, this would be represented as a `stringValue` of
-                            # `"123"`.
-                        "errorValue": { # An error in a cell. # Represents an error.
-                            # This field is read-only.
-                          "message": "A String", # A message with more information about the error
-                              # (in the spreadsheet's locale).
-                          "type": "A String", # The type of error.
-                        },
-                      },
-                      "formattedValue": "A String", # The formatted value of the cell.
-                          # This is the value as it's shown to the user.
-                          # This field is read-only.
-                      "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
-                          # Note: Dates, Times and DateTimes are represented as doubles in
-                          # serial number format.
-                        "numberValue": 3.14, # Represents a double value.
-                            # Note: Dates, Times and DateTimes are represented as doubles in
-                            # "serial number" format.
-                        "boolValue": True or False, # Represents a boolean value.
-                        "formulaValue": "A String", # Represents a formula.
-                        "stringValue": "A String", # Represents a string value.
-                            # Leading single quotes are not included. For example, if the user typed
-                            # `'123` into the UI, this would be represented as a `stringValue` of
-                            # `"123"`.
-                        "errorValue": { # An error in a cell. # Represents an error.
-                            # This field is read-only.
-                          "message": "A String", # A message with more information about the error
-                              # (in the spreadsheet's locale).
-                          "type": "A String", # The type of error.
-                        },
-                      },
-                      "note": "A String", # Any note on the cell.
-                      "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
-                          # This includes the results of applying any conditional formatting and,
-                          # if the cell contains a formula, the computed number format.
-                          # If the effective format is the default format, effective format will
-                          # not be written.
-                          # This field is read-only.
-                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                              # the user's locale will be used if necessary for the given type.
-                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                              # information about the supported patterns.
-                          "type": "A String", # The type of the number format.
-                              # When writing, this field must be set.
-                        },
-                        "textDirection": "A String", # The direction of the text in the cell.
-                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                            # When updating padding, every field must be specified.
-                          "top": 42, # The top padding of the cell.
-                          "right": 42, # The right padding of the cell.
-                          "bottom": 42, # The bottom padding of the cell.
-                          "left": 42, # The left padding of the cell.
-                        },
-                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-                            # for simplicity of conversion to/from color representations in various
-                            # languages over compactness; for example, the fields of this representation
-                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                            # method in iOS; and, with just a little work, it can be easily formatted into
-                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                            #
-                            # Example (Java):
-                            #
-                            #      import com.google.type.Color;
-                            #
-                            #      // ...
-                            #      public static java.awt.Color fromProto(Color protocolor) {
-                            #        float alpha = protocolor.hasAlpha()
-                            #            ? protocolor.getAlpha().getValue()
-                            #            : 1.0;
-                            #
-                            #        return new java.awt.Color(
-                            #            protocolor.getRed(),
-                            #            protocolor.getGreen(),
-                            #            protocolor.getBlue(),
-                            #            alpha);
-                            #      }
-                            #
-                            #      public static Color toProto(java.awt.Color color) {
-                            #        float red = (float) color.getRed();
-                            #        float green = (float) color.getGreen();
-                            #        float blue = (float) color.getBlue();
-                            #        float denominator = 255.0;
-                            #        Color.Builder resultBuilder =
-                            #            Color
-                            #                .newBuilder()
-                            #                .setRed(red / denominator)
-                            #                .setGreen(green / denominator)
-                            #                .setBlue(blue / denominator);
-                            #        int alpha = color.getAlpha();
-                            #        if (alpha != 255) {
-                            #          result.setAlpha(
-                            #              FloatValue
-                            #                  .newBuilder()
-                            #                  .setValue(((float) alpha) / denominator)
-                            #                  .build());
-                            #        }
-                            #        return resultBuilder.build();
-                            #      }
-                            #      // ...
-                            #
-                            # Example (iOS / Obj-C):
-                            #
-                            #      // ...
-                            #      static UIColor* fromProto(Color* protocolor) {
-                            #         float red = [protocolor red];
-                            #         float green = [protocolor green];
-                            #         float blue = [protocolor blue];
-                            #         FloatValue* alpha_wrapper = [protocolor alpha];
-                            #         float alpha = 1.0;
-                            #         if (alpha_wrapper != nil) {
-                            #           alpha = [alpha_wrapper value];
-                            #         }
-                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                            #      }
-                            #
-                            #      static Color* toProto(UIColor* color) {
-                            #          CGFloat red, green, blue, alpha;
-                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                            #            return nil;
-                            #          }
-                            #          Color* result = [Color alloc] init];
-                            #          [result setRed:red];
-                            #          [result setGreen:green];
-                            #          [result setBlue:blue];
-                            #          if (alpha <= 0.9999) {
-                            #            [result setAlpha:floatWrapperWithValue(alpha)];
-                            #          }
-                            #          [result autorelease];
-                            #          return result;
-                            #     }
-                            #     // ...
-                            #
-                            #  Example (JavaScript):
-                            #
-                            #     // ...
-                            #
-                            #     var protoToCssColor = function(rgb_color) {
-                            #        var redFrac = rgb_color.red || 0.0;
-                            #        var greenFrac = rgb_color.green || 0.0;
-                            #        var blueFrac = rgb_color.blue || 0.0;
-                            #        var red = Math.floor(redFrac * 255);
-                            #        var green = Math.floor(greenFrac * 255);
-                            #        var blue = Math.floor(blueFrac * 255);
-                            #
-                            #        if (!('alpha' in rgb_color)) {
-                            #           return rgbToCssColor_(red, green, blue);
-                            #        }
-                            #
-                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                            #        var rgbParams = [red, green, blue].join(',');
-                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                            #     };
-                            #
-                            #     var rgbToCssColor_ = function(red, green, blue) {
-                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                            #       var hexString = rgbNumber.toString(16);
-                            #       var missingZeros = 6 - hexString.length;
-                            #       var resultBuilder = ['#'];
-                            #       for (var i = 0; i < missingZeros; i++) {
-                            #          resultBuilder.push('0');
-                            #       }
-                            #       resultBuilder.push(hexString);
-                            #       return resultBuilder.join('');
-                            #     };
-                            #
-                            #     // ...
-                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                              # the final pixel color is defined by the equation:
-                              #
-                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                              #
-                              # This means that a value of 1.0 corresponds to a solid color, whereas
-                              # a value of 0.0 corresponds to a completely transparent color. This
-                              # uses a wrapper message rather than a simple float scalar so that it is
-                              # possible to distinguish between a default value and the value being unset.
-                              # If omitted, this color object is to be rendered as a solid color
-                              # (as if the alpha value had been explicitly given with a value of 1.0).
-                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                        },
-                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                            # Absent values indicate that the field isn't specified.
-                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                              # for simplicity of conversion to/from color representations in various
-                              # languages over compactness; for example, the fields of this representation
-                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                              # method in iOS; and, with just a little work, it can be easily formatted into
-                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                              #
-                              # Example (Java):
-                              #
-                              #      import com.google.type.Color;
-                              #
-                              #      // ...
-                              #      public static java.awt.Color fromProto(Color protocolor) {
-                              #        float alpha = protocolor.hasAlpha()
-                              #            ? protocolor.getAlpha().getValue()
-                              #            : 1.0;
-                              #
-                              #        return new java.awt.Color(
-                              #            protocolor.getRed(),
-                              #            protocolor.getGreen(),
-                              #            protocolor.getBlue(),
-                              #            alpha);
-                              #      }
-                              #
-                              #      public static Color toProto(java.awt.Color color) {
-                              #        float red = (float) color.getRed();
-                              #        float green = (float) color.getGreen();
-                              #        float blue = (float) color.getBlue();
-                              #        float denominator = 255.0;
-                              #        Color.Builder resultBuilder =
-                              #            Color
-                              #                .newBuilder()
-                              #                .setRed(red / denominator)
-                              #                .setGreen(green / denominator)
-                              #                .setBlue(blue / denominator);
-                              #        int alpha = color.getAlpha();
-                              #        if (alpha != 255) {
-                              #          result.setAlpha(
-                              #              FloatValue
-                              #                  .newBuilder()
-                              #                  .setValue(((float) alpha) / denominator)
-                              #                  .build());
-                              #        }
-                              #        return resultBuilder.build();
-                              #      }
-                              #      // ...
-                              #
-                              # Example (iOS / Obj-C):
-                              #
-                              #      // ...
-                              #      static UIColor* fromProto(Color* protocolor) {
-                              #         float red = [protocolor red];
-                              #         float green = [protocolor green];
-                              #         float blue = [protocolor blue];
-                              #         FloatValue* alpha_wrapper = [protocolor alpha];
-                              #         float alpha = 1.0;
-                              #         if (alpha_wrapper != nil) {
-                              #           alpha = [alpha_wrapper value];
-                              #         }
-                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                              #      }
-                              #
-                              #      static Color* toProto(UIColor* color) {
-                              #          CGFloat red, green, blue, alpha;
-                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                              #            return nil;
-                              #          }
-                              #          Color* result = [Color alloc] init];
-                              #          [result setRed:red];
-                              #          [result setGreen:green];
-                              #          [result setBlue:blue];
-                              #          if (alpha <= 0.9999) {
-                              #            [result setAlpha:floatWrapperWithValue(alpha)];
-                              #          }
-                              #          [result autorelease];
-                              #          return result;
-                              #     }
-                              #     // ...
-                              #
-                              #  Example (JavaScript):
-                              #
-                              #     // ...
-                              #
-                              #     var protoToCssColor = function(rgb_color) {
-                              #        var redFrac = rgb_color.red || 0.0;
-                              #        var greenFrac = rgb_color.green || 0.0;
-                              #        var blueFrac = rgb_color.blue || 0.0;
-                              #        var red = Math.floor(redFrac * 255);
-                              #        var green = Math.floor(greenFrac * 255);
-                              #        var blue = Math.floor(blueFrac * 255);
-                              #
-                              #        if (!('alpha' in rgb_color)) {
-                              #           return rgbToCssColor_(red, green, blue);
-                              #        }
-                              #
-                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                              #        var rgbParams = [red, green, blue].join(',');
-                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                              #     };
-                              #
-                              #     var rgbToCssColor_ = function(red, green, blue) {
-                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                              #       var hexString = rgbNumber.toString(16);
-                              #       var missingZeros = 6 - hexString.length;
-                              #       var resultBuilder = ['#'];
-                              #       for (var i = 0; i < missingZeros; i++) {
-                              #          resultBuilder.push('0');
-                              #       }
-                              #       resultBuilder.push(hexString);
-                              #       return resultBuilder.join('');
-                              #     };
-                              #
-                              #     // ...
-                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                # the final pixel color is defined by the equation:
-                                #
-                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                #
-                                # This means that a value of 1.0 corresponds to a solid color, whereas
-                                # a value of 0.0 corresponds to a completely transparent color. This
-                                # uses a wrapper message rather than a simple float scalar so that it is
-                                # possible to distinguish between a default value and the value being unset.
-                                # If omitted, this color object is to be rendered as a solid color
-                                # (as if the alpha value had been explicitly given with a value of 1.0).
-                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                          },
-                          "bold": True or False, # True if the text is bold.
-                          "strikethrough": True or False, # True if the text has a strikethrough.
-                          "fontFamily": "A String", # The font family.
-                          "fontSize": 42, # The size of the font.
-                          "italic": True or False, # True if the text is italicized.
-                          "underline": True or False, # True if the text is underlined.
-                        },
-                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                        "borders": { # The borders of the cell. # The borders of the cell.
-                          "top": { # A border along a cell. # The top border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "right": { # A border along a cell. # The right border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "bottom": { # A border along a cell. # The bottom border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "left": { # A border along a cell. # The left border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                        },
-                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-                      },
-                      "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
-                          #
-                          # When writing, the new format will be merged with the existing format.
-                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                              # the user's locale will be used if necessary for the given type.
-                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                              # information about the supported patterns.
-                          "type": "A String", # The type of the number format.
-                              # When writing, this field must be set.
-                        },
-                        "textDirection": "A String", # The direction of the text in the cell.
-                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                            # When updating padding, every field must be specified.
-                          "top": 42, # The top padding of the cell.
-                          "right": 42, # The right padding of the cell.
-                          "bottom": 42, # The bottom padding of the cell.
-                          "left": 42, # The left padding of the cell.
-                        },
-                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-                            # for simplicity of conversion to/from color representations in various
-                            # languages over compactness; for example, the fields of this representation
-                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                            # method in iOS; and, with just a little work, it can be easily formatted into
-                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                            #
-                            # Example (Java):
-                            #
-                            #      import com.google.type.Color;
-                            #
-                            #      // ...
-                            #      public static java.awt.Color fromProto(Color protocolor) {
-                            #        float alpha = protocolor.hasAlpha()
-                            #            ? protocolor.getAlpha().getValue()
-                            #            : 1.0;
-                            #
-                            #        return new java.awt.Color(
-                            #            protocolor.getRed(),
-                            #            protocolor.getGreen(),
-                            #            protocolor.getBlue(),
-                            #            alpha);
-                            #      }
-                            #
-                            #      public static Color toProto(java.awt.Color color) {
-                            #        float red = (float) color.getRed();
-                            #        float green = (float) color.getGreen();
-                            #        float blue = (float) color.getBlue();
-                            #        float denominator = 255.0;
-                            #        Color.Builder resultBuilder =
-                            #            Color
-                            #                .newBuilder()
-                            #                .setRed(red / denominator)
-                            #                .setGreen(green / denominator)
-                            #                .setBlue(blue / denominator);
-                            #        int alpha = color.getAlpha();
-                            #        if (alpha != 255) {
-                            #          result.setAlpha(
-                            #              FloatValue
-                            #                  .newBuilder()
-                            #                  .setValue(((float) alpha) / denominator)
-                            #                  .build());
-                            #        }
-                            #        return resultBuilder.build();
-                            #      }
-                            #      // ...
-                            #
-                            # Example (iOS / Obj-C):
-                            #
-                            #      // ...
-                            #      static UIColor* fromProto(Color* protocolor) {
-                            #         float red = [protocolor red];
-                            #         float green = [protocolor green];
-                            #         float blue = [protocolor blue];
-                            #         FloatValue* alpha_wrapper = [protocolor alpha];
-                            #         float alpha = 1.0;
-                            #         if (alpha_wrapper != nil) {
-                            #           alpha = [alpha_wrapper value];
-                            #         }
-                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                            #      }
-                            #
-                            #      static Color* toProto(UIColor* color) {
-                            #          CGFloat red, green, blue, alpha;
-                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                            #            return nil;
-                            #          }
-                            #          Color* result = [Color alloc] init];
-                            #          [result setRed:red];
-                            #          [result setGreen:green];
-                            #          [result setBlue:blue];
-                            #          if (alpha <= 0.9999) {
-                            #            [result setAlpha:floatWrapperWithValue(alpha)];
-                            #          }
-                            #          [result autorelease];
-                            #          return result;
-                            #     }
-                            #     // ...
-                            #
-                            #  Example (JavaScript):
-                            #
-                            #     // ...
-                            #
-                            #     var protoToCssColor = function(rgb_color) {
-                            #        var redFrac = rgb_color.red || 0.0;
-                            #        var greenFrac = rgb_color.green || 0.0;
-                            #        var blueFrac = rgb_color.blue || 0.0;
-                            #        var red = Math.floor(redFrac * 255);
-                            #        var green = Math.floor(greenFrac * 255);
-                            #        var blue = Math.floor(blueFrac * 255);
-                            #
-                            #        if (!('alpha' in rgb_color)) {
-                            #           return rgbToCssColor_(red, green, blue);
-                            #        }
-                            #
-                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                            #        var rgbParams = [red, green, blue].join(',');
-                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                            #     };
-                            #
-                            #     var rgbToCssColor_ = function(red, green, blue) {
-                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                            #       var hexString = rgbNumber.toString(16);
-                            #       var missingZeros = 6 - hexString.length;
-                            #       var resultBuilder = ['#'];
-                            #       for (var i = 0; i < missingZeros; i++) {
-                            #          resultBuilder.push('0');
-                            #       }
-                            #       resultBuilder.push(hexString);
-                            #       return resultBuilder.join('');
-                            #     };
-                            #
-                            #     // ...
-                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                              # the final pixel color is defined by the equation:
-                              #
-                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                              #
-                              # This means that a value of 1.0 corresponds to a solid color, whereas
-                              # a value of 0.0 corresponds to a completely transparent color. This
-                              # uses a wrapper message rather than a simple float scalar so that it is
-                              # possible to distinguish between a default value and the value being unset.
-                              # If omitted, this color object is to be rendered as a solid color
-                              # (as if the alpha value had been explicitly given with a value of 1.0).
-                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                        },
-                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                            # Absent values indicate that the field isn't specified.
-                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                              # for simplicity of conversion to/from color representations in various
-                              # languages over compactness; for example, the fields of this representation
-                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                              # method in iOS; and, with just a little work, it can be easily formatted into
-                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                              #
-                              # Example (Java):
-                              #
-                              #      import com.google.type.Color;
-                              #
-                              #      // ...
-                              #      public static java.awt.Color fromProto(Color protocolor) {
-                              #        float alpha = protocolor.hasAlpha()
-                              #            ? protocolor.getAlpha().getValue()
-                              #            : 1.0;
-                              #
-                              #        return new java.awt.Color(
-                              #            protocolor.getRed(),
-                              #            protocolor.getGreen(),
-                              #            protocolor.getBlue(),
-                              #            alpha);
-                              #      }
-                              #
-                              #      public static Color toProto(java.awt.Color color) {
-                              #        float red = (float) color.getRed();
-                              #        float green = (float) color.getGreen();
-                              #        float blue = (float) color.getBlue();
-                              #        float denominator = 255.0;
-                              #        Color.Builder resultBuilder =
-                              #            Color
-                              #                .newBuilder()
-                              #                .setRed(red / denominator)
-                              #                .setGreen(green / denominator)
-                              #                .setBlue(blue / denominator);
-                              #        int alpha = color.getAlpha();
-                              #        if (alpha != 255) {
-                              #          result.setAlpha(
-                              #              FloatValue
-                              #                  .newBuilder()
-                              #                  .setValue(((float) alpha) / denominator)
-                              #                  .build());
-                              #        }
-                              #        return resultBuilder.build();
-                              #      }
-                              #      // ...
-                              #
-                              # Example (iOS / Obj-C):
-                              #
-                              #      // ...
-                              #      static UIColor* fromProto(Color* protocolor) {
-                              #         float red = [protocolor red];
-                              #         float green = [protocolor green];
-                              #         float blue = [protocolor blue];
-                              #         FloatValue* alpha_wrapper = [protocolor alpha];
-                              #         float alpha = 1.0;
-                              #         if (alpha_wrapper != nil) {
-                              #           alpha = [alpha_wrapper value];
-                              #         }
-                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                              #      }
-                              #
-                              #      static Color* toProto(UIColor* color) {
-                              #          CGFloat red, green, blue, alpha;
-                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                              #            return nil;
-                              #          }
-                              #          Color* result = [Color alloc] init];
-                              #          [result setRed:red];
-                              #          [result setGreen:green];
-                              #          [result setBlue:blue];
-                              #          if (alpha <= 0.9999) {
-                              #            [result setAlpha:floatWrapperWithValue(alpha)];
-                              #          }
-                              #          [result autorelease];
-                              #          return result;
-                              #     }
-                              #     // ...
-                              #
-                              #  Example (JavaScript):
-                              #
-                              #     // ...
-                              #
-                              #     var protoToCssColor = function(rgb_color) {
-                              #        var redFrac = rgb_color.red || 0.0;
-                              #        var greenFrac = rgb_color.green || 0.0;
-                              #        var blueFrac = rgb_color.blue || 0.0;
-                              #        var red = Math.floor(redFrac * 255);
-                              #        var green = Math.floor(greenFrac * 255);
-                              #        var blue = Math.floor(blueFrac * 255);
-                              #
-                              #        if (!('alpha' in rgb_color)) {
-                              #           return rgbToCssColor_(red, green, blue);
-                              #        }
-                              #
-                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                              #        var rgbParams = [red, green, blue].join(',');
-                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                              #     };
-                              #
-                              #     var rgbToCssColor_ = function(red, green, blue) {
-                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                              #       var hexString = rgbNumber.toString(16);
-                              #       var missingZeros = 6 - hexString.length;
-                              #       var resultBuilder = ['#'];
-                              #       for (var i = 0; i < missingZeros; i++) {
-                              #          resultBuilder.push('0');
-                              #       }
-                              #       resultBuilder.push(hexString);
-                              #       return resultBuilder.join('');
-                              #     };
-                              #
-                              #     // ...
-                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                # the final pixel color is defined by the equation:
-                                #
-                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                #
-                                # This means that a value of 1.0 corresponds to a solid color, whereas
-                                # a value of 0.0 corresponds to a completely transparent color. This
-                                # uses a wrapper message rather than a simple float scalar so that it is
-                                # possible to distinguish between a default value and the value being unset.
-                                # If omitted, this color object is to be rendered as a solid color
-                                # (as if the alpha value had been explicitly given with a value of 1.0).
-                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                          },
-                          "bold": True or False, # True if the text is bold.
-                          "strikethrough": True or False, # True if the text has a strikethrough.
-                          "fontFamily": "A String", # The font family.
-                          "fontSize": 42, # The size of the font.
-                          "italic": True or False, # True if the text is italicized.
-                          "underline": True or False, # True if the text is underlined.
-                        },
-                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                        "borders": { # The borders of the cell. # The borders of the cell.
-                          "top": { # A border along a cell. # The top border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "right": { # A border along a cell. # The right border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "bottom": { # A border along a cell. # The bottom border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "left": { # A border along a cell. # The left border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                        },
-                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-                      },
-                      "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
-                          #
-                          # When writing, the new data validation rule will overwrite any prior rule.
-                        "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
-                            # If true, "List" conditions will show a dropdown.
-                        "strict": True or False, # True if invalid data should be rejected.
-                        "inputMessage": "A String", # A message to show the user when adding data to the cell.
-                        "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
-                            # BooleanConditions are used by conditional formatting,
-                            # data validation, and the criteria in filters.
-                          "type": "A String", # The type of condition.
-                          "values": [ # The values of the condition. The number of supported values depends
-                              # on the condition type.  Some support zero values,
-                              # others one or two values,
-                              # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                            { # The value of the condition.
-                              "relativeDate": "A String", # A relative date (based on the current date).
-                                  # Valid only if the type is
-                                  # DATE_BEFORE,
-                                  # DATE_AFTER,
-                                  # DATE_ON_OR_BEFORE or
-                                  # DATE_ON_OR_AFTER.
-                                  #
-                                  # Relative dates are not supported in data validation.
-                                  # They are supported only in conditional formatting and
-                                  # conditional filters.
-                              "userEnteredValue": "A String", # A value the condition is based on.
-                                  # The value will be parsed as if the user typed into a cell.
-                                  # Formulas are supported (and must begin with an `=`).
-                            },
-                          ],
-                        },
-                      },
-                      "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.  Runs are only valid
-                          # on user entered strings, not formulas, bools, or numbers.
-                          # Runs start at specific indexes in the text and continue until the next
-                          # run. Properties of a run will continue unless explicitly changed
-                          # in a subsequent run (and properties of the first run will continue
-                          # the properties of the cell unless explicitly changed).
-                          #
-                          # When writing, the new runs will overwrite any prior runs.  When writing a
-                          # new user_entered_value, previous runs will be erased.
-                        { # A run of a text format. The format of this run continues until the start
-                            # index of the next run.
-                            # When updating, all fields must be set.
-                          "startIndex": 42, # The character index where this run starts.
-                          "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
-                              # Absent values indicate that the field isn't specified.
-                            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "bold": True or False, # True if the text is bold.
-                            "strikethrough": True or False, # True if the text has a strikethrough.
-                            "fontFamily": "A String", # The font family.
-                            "fontSize": 42, # The size of the font.
-                            "italic": True or False, # True if the text is italicized.
-                            "underline": True or False, # True if the text is underlined.
-                          },
-                        },
-                      ],
-                    },
-                  ],
-                },
-              ],
-            },
-          ],
-          "properties": { # Properties of a sheet. # The properties of the sheet.
-            "sheetType": "A String", # The type of sheet. Defaults to GRID.
-                # This field cannot be changed once set.
-            "index": 42, # The index of the sheet within the spreadsheet.
-                # When adding or updating sheet properties, if this field
-                # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
-            "title": "A String", # The name of the sheet.
-            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
-                # (If the sheet is an object sheet, containing a chart or image, then
-                # this field will be absent.)
-                # When writing it is an error to set any grid properties on non-grid sheets.
-              "columnCount": 42, # The number of columns in the grid.
-              "rowCount": 42, # The number of rows in the grid.
-              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
-              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
-              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
-            },
-            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
-            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
-                # for simplicity of conversion to/from color representations in various
-                # languages over compactness; for example, the fields of this representation
-                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                # method in iOS; and, with just a little work, it can be easily formatted into
-                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                #
-                # Example (Java):
-                #
-                #      import com.google.type.Color;
-                #
-                #      // ...
-                #      public static java.awt.Color fromProto(Color protocolor) {
-                #        float alpha = protocolor.hasAlpha()
-                #            ? protocolor.getAlpha().getValue()
-                #            : 1.0;
-                #
-                #        return new java.awt.Color(
-                #            protocolor.getRed(),
-                #            protocolor.getGreen(),
-                #            protocolor.getBlue(),
-                #            alpha);
-                #      }
-                #
-                #      public static Color toProto(java.awt.Color color) {
-                #        float red = (float) color.getRed();
-                #        float green = (float) color.getGreen();
-                #        float blue = (float) color.getBlue();
-                #        float denominator = 255.0;
-                #        Color.Builder resultBuilder =
-                #            Color
-                #                .newBuilder()
-                #                .setRed(red / denominator)
-                #                .setGreen(green / denominator)
-                #                .setBlue(blue / denominator);
-                #        int alpha = color.getAlpha();
-                #        if (alpha != 255) {
-                #          result.setAlpha(
-                #              FloatValue
-                #                  .newBuilder()
-                #                  .setValue(((float) alpha) / denominator)
-                #                  .build());
-                #        }
-                #        return resultBuilder.build();
-                #      }
-                #      // ...
-                #
-                # Example (iOS / Obj-C):
-                #
-                #      // ...
-                #      static UIColor* fromProto(Color* protocolor) {
-                #         float red = [protocolor red];
-                #         float green = [protocolor green];
-                #         float blue = [protocolor blue];
-                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                #         float alpha = 1.0;
-                #         if (alpha_wrapper != nil) {
-                #           alpha = [alpha_wrapper value];
-                #         }
-                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                #      }
-                #
-                #      static Color* toProto(UIColor* color) {
-                #          CGFloat red, green, blue, alpha;
-                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                #            return nil;
-                #          }
-                #          Color* result = [Color alloc] init];
-                #          [result setRed:red];
-                #          [result setGreen:green];
-                #          [result setBlue:blue];
-                #          if (alpha <= 0.9999) {
-                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                #          }
-                #          [result autorelease];
-                #          return result;
-                #     }
-                #     // ...
-                #
-                #  Example (JavaScript):
-                #
-                #     // ...
-                #
-                #     var protoToCssColor = function(rgb_color) {
-                #        var redFrac = rgb_color.red || 0.0;
-                #        var greenFrac = rgb_color.green || 0.0;
-                #        var blueFrac = rgb_color.blue || 0.0;
-                #        var red = Math.floor(redFrac * 255);
-                #        var green = Math.floor(greenFrac * 255);
-                #        var blue = Math.floor(blueFrac * 255);
-                #
-                #        if (!('alpha' in rgb_color)) {
-                #           return rgbToCssColor_(red, green, blue);
-                #        }
-                #
-                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                #        var rgbParams = [red, green, blue].join(',');
-                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                #     };
-                #
-                #     var rgbToCssColor_ = function(red, green, blue) {
-                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                #       var hexString = rgbNumber.toString(16);
-                #       var missingZeros = 6 - hexString.length;
-                #       var resultBuilder = ['#'];
-                #       for (var i = 0; i < missingZeros; i++) {
-                #          resultBuilder.push('0');
-                #       }
-                #       resultBuilder.push(hexString);
-                #       return resultBuilder.join('');
-                #     };
-                #
-                #     // ...
-              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                  # the final pixel color is defined by the equation:
-                  #
-                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                  #
-                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                  # a value of 0.0 corresponds to a completely transparent color. This
-                  # uses a wrapper message rather than a simple float scalar so that it is
-                  # possible to distinguish between a default value and the value being unset.
-                  # If omitted, this color object is to be rendered as a solid color
-                  # (as if the alpha value had been explicitly given with a value of 1.0).
-              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-            },
-            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
-            "sheetId": 42, # The ID of the sheet. Must be non-negative.
-                # This field cannot be changed once set.
-          },
-        },
-      ],
-    }</pre>
+    "spreadsheetUrl": "A String", # The url of the spreadsheet.
+        # This field is read-only.
+  }</pre>
 </div>
 
 <div class="method">
@@ -29096,85 +41162,217 @@
   An object of the form:
 
     { # Resource that represents a spreadsheet.
-      "spreadsheetId": "A String", # The ID of the spreadsheet.
-          # This field is read-only.
-      "namedRanges": [ # The named ranges defined in a spreadsheet.
-        { # A named range.
-          "namedRangeId": "A String", # The ID of the named range.
-          "range": { # A range on a sheet. # The range this represents.
-              # All indexes are zero-based.
-              # Indexes are half open, e.g the start index is inclusive
-              # and the end index is exclusive -- [start_index, end_index).
-              # Missing indexes indicate the range is unbounded on that side.
-              #
-              # For example, if `"Sheet1"` is sheet ID 0, then:
-              #
-              #   `Sheet1!A1:A1 == sheet_id: 0,
-              #                   start_row_index: 0, end_row_index: 1,
-              #                   start_column_index: 0, end_column_index: 1`
-              #
-              #   `Sheet1!A3:B4 == sheet_id: 0,
-              #                   start_row_index: 2, end_row_index: 4,
-              #                   start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1!A:B == sheet_id: 0,
-              #                 start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1!A5:B == sheet_id: 0,
-              #                  start_row_index: 4,
-              #                  start_column_index: 0, end_column_index: 2`
-              #
-              #   `Sheet1 == sheet_id:0`
-              #
-              # The start index must always be less than or equal to the end index.
-              # If the start index equals the end index, then the range is empty.
-              # Empty ranges are typically not meaningful and are usually rendered in the
-              # UI as `#REF!`.
-            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-            "sheetId": 42, # The sheet this range is on.
-            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-          },
-          "name": "A String", # The name of the named range.
+    "spreadsheetId": "A String", # The ID of the spreadsheet.
+        # This field is read-only.
+    "namedRanges": [ # The named ranges defined in a spreadsheet.
+      { # A named range.
+        "namedRangeId": "A String", # The ID of the named range.
+        "range": { # A range on a sheet. # The range this represents.
+            # All indexes are zero-based.
+            # Indexes are half open, e.g the start index is inclusive
+            # and the end index is exclusive -- [start_index, end_index).
+            # Missing indexes indicate the range is unbounded on that side.
+            #
+            # For example, if `"Sheet1"` is sheet ID 0, then:
+            #
+            #   `Sheet1!A1:A1 == sheet_id: 0,
+            #                   start_row_index: 0, end_row_index: 1,
+            #                   start_column_index: 0, end_column_index: 1`
+            #
+            #   `Sheet1!A3:B4 == sheet_id: 0,
+            #                   start_row_index: 2, end_row_index: 4,
+            #                   start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A:B == sheet_id: 0,
+            #                 start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1!A5:B == sheet_id: 0,
+            #                  start_row_index: 4,
+            #                  start_column_index: 0, end_column_index: 2`
+            #
+            #   `Sheet1 == sheet_id:0`
+            #
+            # The start index must always be less than or equal to the end index.
+            # If the start index equals the end index, then the range is empty.
+            # Empty ranges are typically not meaningful and are usually rendered in the
+            # UI as `#REF!`.
+          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+          "sheetId": 42, # The sheet this range is on.
+          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
         },
-      ],
-      "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
-        "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+        "name": "A String", # The name of the named range.
+      },
+    ],
+    "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+      "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+          #
+          # * an ISO 639-1 language code such as `en`
+          #
+          # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+          #
+          # * a combination of the ISO language code and country code, such as `en_US`
+          #
+          # Note: when updating this field, not all locales/languages are supported.
+      "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+          # `America/New_York`. If the time zone isn't recognized, this may
+          # be a custom time zone such as `GMT-07:00`.
+      "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+      "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+          # CellData.effectiveFormat will not be set if the
+          # cell's format is equal to this default format.
+          # This field is read-only.
+        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+              # the user's locale will be used if necessary for the given type.
+              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+              # information about the supported patterns.
+          "type": "A String", # The type of the number format.
+              # When writing, this field must be set.
+        },
+        "textDirection": "A String", # The direction of the text in the cell.
+        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+            # When updating padding, every field must be specified.
+          "top": 42, # The top padding of the cell.
+          "right": 42, # The right padding of the cell.
+          "bottom": 42, # The bottom padding of the cell.
+          "left": 42, # The left padding of the cell.
+        },
+        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+            # for simplicity of conversion to/from color representations in various
+            # languages over compactness; for example, the fields of this representation
+            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+            # method in iOS; and, with just a little work, it can be easily formatted into
+            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
             #
-            # * an ISO 639-1 language code such as `en`
+            # Example (Java):
             #
-            # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+            #      import com.google.type.Color;
             #
-            # * a combination of the ISO language code and country code, such as `en_US`
+            #      // ...
+            #      public static java.awt.Color fromProto(Color protocolor) {
+            #        float alpha = protocolor.hasAlpha()
+            #            ? protocolor.getAlpha().getValue()
+            #            : 1.0;
             #
-            # Note: when updating this field, not all locales/languages are supported.
-        "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
-            # `America/New_York`. If the time zone isn't recognized, this may
-            # be a custom time zone such as `GMT-07:00`.
-        "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
-        "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
-            # CellData.effectiveFormat will not be set if the
-            # cell's format is equal to this default format.
-            # This field is read-only.
-          "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-            "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                # the user's locale will be used if necessary for the given type.
-                # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                # information about the supported patterns.
-            "type": "A String", # The type of the number format.
-                # When writing, this field must be set.
-          },
-          "textDirection": "A String", # The direction of the text in the cell.
-          "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-              # When updating padding, every field must be specified.
-            "top": 42, # The top padding of the cell.
-            "right": 42, # The right padding of the cell.
-            "bottom": 42, # The bottom padding of the cell.
-            "left": 42, # The left padding of the cell.
-          },
-          "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-          "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+            #        return new java.awt.Color(
+            #            protocolor.getRed(),
+            #            protocolor.getGreen(),
+            #            protocolor.getBlue(),
+            #            alpha);
+            #      }
+            #
+            #      public static Color toProto(java.awt.Color color) {
+            #        float red = (float) color.getRed();
+            #        float green = (float) color.getGreen();
+            #        float blue = (float) color.getBlue();
+            #        float denominator = 255.0;
+            #        Color.Builder resultBuilder =
+            #            Color
+            #                .newBuilder()
+            #                .setRed(red / denominator)
+            #                .setGreen(green / denominator)
+            #                .setBlue(blue / denominator);
+            #        int alpha = color.getAlpha();
+            #        if (alpha != 255) {
+            #          result.setAlpha(
+            #              FloatValue
+            #                  .newBuilder()
+            #                  .setValue(((float) alpha) / denominator)
+            #                  .build());
+            #        }
+            #        return resultBuilder.build();
+            #      }
+            #      // ...
+            #
+            # Example (iOS / Obj-C):
+            #
+            #      // ...
+            #      static UIColor* fromProto(Color* protocolor) {
+            #         float red = [protocolor red];
+            #         float green = [protocolor green];
+            #         float blue = [protocolor blue];
+            #         FloatValue* alpha_wrapper = [protocolor alpha];
+            #         float alpha = 1.0;
+            #         if (alpha_wrapper != nil) {
+            #           alpha = [alpha_wrapper value];
+            #         }
+            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+            #      }
+            #
+            #      static Color* toProto(UIColor* color) {
+            #          CGFloat red, green, blue, alpha;
+            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+            #            return nil;
+            #          }
+            #          Color* result = [Color alloc] init];
+            #          [result setRed:red];
+            #          [result setGreen:green];
+            #          [result setBlue:blue];
+            #          if (alpha <= 0.9999) {
+            #            [result setAlpha:floatWrapperWithValue(alpha)];
+            #          }
+            #          [result autorelease];
+            #          return result;
+            #     }
+            #     // ...
+            #
+            #  Example (JavaScript):
+            #
+            #     // ...
+            #
+            #     var protoToCssColor = function(rgb_color) {
+            #        var redFrac = rgb_color.red || 0.0;
+            #        var greenFrac = rgb_color.green || 0.0;
+            #        var blueFrac = rgb_color.blue || 0.0;
+            #        var red = Math.floor(redFrac * 255);
+            #        var green = Math.floor(greenFrac * 255);
+            #        var blue = Math.floor(blueFrac * 255);
+            #
+            #        if (!('alpha' in rgb_color)) {
+            #           return rgbToCssColor_(red, green, blue);
+            #        }
+            #
+            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+            #        var rgbParams = [red, green, blue].join(',');
+            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+            #     };
+            #
+            #     var rgbToCssColor_ = function(red, green, blue) {
+            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+            #       var hexString = rgbNumber.toString(16);
+            #       var missingZeros = 6 - hexString.length;
+            #       var resultBuilder = ['#'];
+            #       for (var i = 0; i < missingZeros; i++) {
+            #          resultBuilder.push('0');
+            #       }
+            #       resultBuilder.push(hexString);
+            #       return resultBuilder.join('');
+            #     };
+            #
+            #     // ...
+          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+              # the final pixel color is defined by the equation:
+              #
+              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+              #
+              # This means that a value of 1.0 corresponds to a solid color, whereas
+              # a value of 0.0 corresponds to a completely transparent color. This
+              # uses a wrapper message rather than a simple float scalar so that it is
+              # possible to distinguish between a default value and the value being unset.
+              # If omitted, this color object is to be rendered as a solid color
+              # (as if the alpha value had been explicitly given with a value of 1.0).
+          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+        },
+        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+            # Absent values indicate that the field isn't specified.
+          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
               # for simplicity of conversion to/from color representations in various
               # languages over compactness; for example, the fields of this representation
               # can be trivially provided to the constructor of "java.awt.Color" in Java; it
@@ -29303,10 +41501,17 @@
             "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
             "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
           },
-          "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-          "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-              # Absent values indicate that the field isn't specified.
-            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+          "bold": True or False, # True if the text is bold.
+          "strikethrough": True or False, # True if the text has a strikethrough.
+          "fontFamily": "A String", # The font family.
+          "fontSize": 42, # The size of the font.
+          "italic": True or False, # True if the text is italicized.
+          "underline": True or False, # True if the text is underlined.
+        },
+        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+        "borders": { # The borders of the cell. # The borders of the cell.
+          "top": { # A border along a cell. # The top border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
                 # for simplicity of conversion to/from color representations in various
                 # languages over compactness; for example, the fields of this representation
                 # can be trivially provided to the constructor of "java.awt.Color" in Java; it
@@ -29435,649 +41640,642 @@
               "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
               "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
             },
-            "bold": True or False, # True if the text is bold.
-            "strikethrough": True or False, # True if the text has a strikethrough.
-            "fontFamily": "A String", # The font family.
-            "fontSize": 42, # The size of the font.
-            "italic": True or False, # True if the text is italicized.
-            "underline": True or False, # True if the text is underlined.
+            "width": 42, # The width of the border, in pixels.
+                # Deprecated; the width is determined by the "style" field.
+            "style": "A String", # The style of the border.
           },
-          "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-          "borders": { # The borders of the cell. # The borders of the cell.
-            "top": { # A border along a cell. # The top border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+          "right": { # A border along a cell. # The right border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
                   #
-                  # Example (Java):
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
                   #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
             },
-            "right": { # A border along a cell. # The right border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-            "bottom": { # A border along a cell. # The bottom border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
-            "left": { # A border along a cell. # The left border of the cell.
-              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                  # for simplicity of conversion to/from color representations in various
-                  # languages over compactness; for example, the fields of this representation
-                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                  # method in iOS; and, with just a little work, it can be easily formatted into
-                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                  #
-                  # Example (Java):
-                  #
-                  #      import com.google.type.Color;
-                  #
-                  #      // ...
-                  #      public static java.awt.Color fromProto(Color protocolor) {
-                  #        float alpha = protocolor.hasAlpha()
-                  #            ? protocolor.getAlpha().getValue()
-                  #            : 1.0;
-                  #
-                  #        return new java.awt.Color(
-                  #            protocolor.getRed(),
-                  #            protocolor.getGreen(),
-                  #            protocolor.getBlue(),
-                  #            alpha);
-                  #      }
-                  #
-                  #      public static Color toProto(java.awt.Color color) {
-                  #        float red = (float) color.getRed();
-                  #        float green = (float) color.getGreen();
-                  #        float blue = (float) color.getBlue();
-                  #        float denominator = 255.0;
-                  #        Color.Builder resultBuilder =
-                  #            Color
-                  #                .newBuilder()
-                  #                .setRed(red / denominator)
-                  #                .setGreen(green / denominator)
-                  #                .setBlue(blue / denominator);
-                  #        int alpha = color.getAlpha();
-                  #        if (alpha != 255) {
-                  #          result.setAlpha(
-                  #              FloatValue
-                  #                  .newBuilder()
-                  #                  .setValue(((float) alpha) / denominator)
-                  #                  .build());
-                  #        }
-                  #        return resultBuilder.build();
-                  #      }
-                  #      // ...
-                  #
-                  # Example (iOS / Obj-C):
-                  #
-                  #      // ...
-                  #      static UIColor* fromProto(Color* protocolor) {
-                  #         float red = [protocolor red];
-                  #         float green = [protocolor green];
-                  #         float blue = [protocolor blue];
-                  #         FloatValue* alpha_wrapper = [protocolor alpha];
-                  #         float alpha = 1.0;
-                  #         if (alpha_wrapper != nil) {
-                  #           alpha = [alpha_wrapper value];
-                  #         }
-                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                  #      }
-                  #
-                  #      static Color* toProto(UIColor* color) {
-                  #          CGFloat red, green, blue, alpha;
-                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                  #            return nil;
-                  #          }
-                  #          Color* result = [Color alloc] init];
-                  #          [result setRed:red];
-                  #          [result setGreen:green];
-                  #          [result setBlue:blue];
-                  #          if (alpha <= 0.9999) {
-                  #            [result setAlpha:floatWrapperWithValue(alpha)];
-                  #          }
-                  #          [result autorelease];
-                  #          return result;
-                  #     }
-                  #     // ...
-                  #
-                  #  Example (JavaScript):
-                  #
-                  #     // ...
-                  #
-                  #     var protoToCssColor = function(rgb_color) {
-                  #        var redFrac = rgb_color.red || 0.0;
-                  #        var greenFrac = rgb_color.green || 0.0;
-                  #        var blueFrac = rgb_color.blue || 0.0;
-                  #        var red = Math.floor(redFrac * 255);
-                  #        var green = Math.floor(greenFrac * 255);
-                  #        var blue = Math.floor(blueFrac * 255);
-                  #
-                  #        if (!('alpha' in rgb_color)) {
-                  #           return rgbToCssColor_(red, green, blue);
-                  #        }
-                  #
-                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                  #        var rgbParams = [red, green, blue].join(',');
-                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                  #     };
-                  #
-                  #     var rgbToCssColor_ = function(red, green, blue) {
-                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                  #       var hexString = rgbNumber.toString(16);
-                  #       var missingZeros = 6 - hexString.length;
-                  #       var resultBuilder = ['#'];
-                  #       for (var i = 0; i < missingZeros; i++) {
-                  #          resultBuilder.push('0');
-                  #       }
-                  #       resultBuilder.push(hexString);
-                  #       return resultBuilder.join('');
-                  #     };
-                  #
-                  #     // ...
-                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                    # the final pixel color is defined by the equation:
-                    #
-                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                    #
-                    # This means that a value of 1.0 corresponds to a solid color, whereas
-                    # a value of 0.0 corresponds to a completely transparent color. This
-                    # uses a wrapper message rather than a simple float scalar so that it is
-                    # possible to distinguish between a default value and the value being unset.
-                    # If omitted, this color object is to be rendered as a solid color
-                    # (as if the alpha value had been explicitly given with a value of 1.0).
-                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-              },
-              "width": 42, # The width of the border, in pixels.
-                  # Deprecated; the width is determined by the "style" field.
-              "style": "A String", # The style of the border.
-            },
+            "width": 42, # The width of the border, in pixels.
+                # Deprecated; the width is determined by the "style" field.
+            "style": "A String", # The style of the border.
           },
-          "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+          "bottom": { # A border along a cell. # The bottom border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Deprecated; the width is determined by the "style" field.
+            "style": "A String", # The style of the border.
+          },
+          "left": { # A border along a cell. # The left border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Deprecated; the width is determined by the "style" field.
+            "style": "A String", # The style of the border.
+          },
         },
-        "title": "A String", # The title of the spreadsheet.
+        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
       },
-      "sheets": [ # The sheets that are part of a spreadsheet.
-        { # A sheet in a spreadsheet.
-          "conditionalFormats": [ # The conditional format rules in this sheet.
-            { # A rule describing a conditional format.
-              "ranges": [ # The ranges that will be formatted if the condition is true.
-                  # All the ranges must be on the same grid.
-                { # A range on a sheet.
-                    # All indexes are zero-based.
-                    # Indexes are half open, e.g the start index is inclusive
-                    # and the end index is exclusive -- [start_index, end_index).
-                    # Missing indexes indicate the range is unbounded on that side.
-                    #
-                    # For example, if `"Sheet1"` is sheet ID 0, then:
-                    #
-                    #   `Sheet1!A1:A1 == sheet_id: 0,
-                    #                   start_row_index: 0, end_row_index: 1,
-                    #                   start_column_index: 0, end_column_index: 1`
-                    #
-                    #   `Sheet1!A3:B4 == sheet_id: 0,
-                    #                   start_row_index: 2, end_row_index: 4,
-                    #                   start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A:B == sheet_id: 0,
-                    #                 start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A5:B == sheet_id: 0,
-                    #                  start_row_index: 4,
-                    #                  start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1 == sheet_id:0`
-                    #
-                    # The start index must always be less than or equal to the end index.
-                    # If the start index equals the end index, then the range is empty.
-                    # Empty ranges are typically not meaningful and are usually rendered in the
-                    # UI as `#REF!`.
-                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                  "sheetId": 42, # The sheet this range is on.
-                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                },
-              ],
-              "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
-                "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
-                    # the format will be applied.
-                    # BooleanConditions are used by conditional formatting,
-                    # data validation, and the criteria in filters.
-                  "type": "A String", # The type of condition.
-                  "values": [ # The values of the condition. The number of supported values depends
-                      # on the condition type.  Some support zero values,
-                      # others one or two values,
-                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                    { # The value of the condition.
-                      "relativeDate": "A String", # A relative date (based on the current date).
-                          # Valid only if the type is
-                          # DATE_BEFORE,
-                          # DATE_AFTER,
-                          # DATE_ON_OR_BEFORE or
-                          # DATE_ON_OR_AFTER.
-                          #
-                          # Relative dates are not supported in data validation.
-                          # They are supported only in conditional formatting and
-                          # conditional filters.
-                      "userEnteredValue": "A String", # A value the condition is based on.
-                          # The value will be parsed as if the user typed into a cell.
-                          # Formulas are supported (and must begin with an `=`).
-                    },
-                  ],
-                },
-                "format": { # The format of a cell. # The format to apply.
-                    # Conditional formatting can only apply a subset of formatting:
-                    # bold, italic,
-                    # strikethrough,
-                    # foreground color &
-                    # background color.
-                  "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                    "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                        # the user's locale will be used if necessary for the given type.
-                        # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                        # information about the supported patterns.
-                    "type": "A String", # The type of the number format.
-                        # When writing, this field must be set.
+      "title": "A String", # The title of the spreadsheet.
+    },
+    "sheets": [ # The sheets that are part of a spreadsheet.
+      { # A sheet in a spreadsheet.
+        "conditionalFormats": [ # The conditional format rules in this sheet.
+          { # A rule describing a conditional format.
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # All indexes are zero-based.
+                  # Indexes are half open, e.g the start index is inclusive
+                  # and the end index is exclusive -- [start_index, end_index).
+                  # Missing indexes indicate the range is unbounded on that side.
+                  #
+                  # For example, if `"Sheet1"` is sheet ID 0, then:
+                  #
+                  #   `Sheet1!A1:A1 == sheet_id: 0,
+                  #                   start_row_index: 0, end_row_index: 1,
+                  #                   start_column_index: 0, end_column_index: 1`
+                  #
+                  #   `Sheet1!A3:B4 == sheet_id: 0,
+                  #                   start_row_index: 2, end_row_index: 4,
+                  #                   start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A:B == sheet_id: 0,
+                  #                 start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A5:B == sheet_id: 0,
+                  #                  start_row_index: 4,
+                  #                  start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1 == sheet_id:0`
+                  #
+                  # The start index must always be less than or equal to the end index.
+                  # If the start index equals the end index, then the range is empty.
+                  # Empty ranges are typically not meaningful and are usually rendered in the
+                  # UI as `#REF!`.
+                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                "sheetId": 42, # The sheet this range is on.
+                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
                   },
-                  "textDirection": "A String", # The direction of the text in the cell.
-                  "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                      # When updating padding, every field must be specified.
-                    "top": 42, # The top padding of the cell.
-                    "right": 42, # The right padding of the cell.
-                    "bottom": 42, # The bottom padding of the cell.
-                    "left": 42, # The left padding of the cell.
-                  },
-                  "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                  "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                  "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                      # the user's locale will be used if necessary for the given type.
+                      # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                      # information about the supported patterns.
+                  "type": "A String", # The type of the number format.
+                      # When writing, this field must be set.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
                       # for simplicity of conversion to/from color representations in various
                       # languages over compactness; for example, the fields of this representation
                       # can be trivially provided to the constructor of "java.awt.Color" in Java; it
@@ -30206,10 +42404,17 @@
                     "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
                     "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
                   },
-                  "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                  "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                      # Absent values indicate that the field isn't specified.
-                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
                         # for simplicity of conversion to/from color representations in various
                         # languages over compactness; for example, the fields of this representation
                         # can be trivially provided to the constructor of "java.awt.Color" in Java; it
@@ -30338,975 +42543,837 @@
                       "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
                       "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
                     },
-                    "bold": True or False, # True if the text is bold.
-                    "strikethrough": True or False, # True if the text has a strikethrough.
-                    "fontFamily": "A String", # The font family.
-                    "fontSize": 42, # The size of the font.
-                    "italic": True or False, # True if the text is italicized.
-                    "underline": True or False, # True if the text is underlined.
+                    "width": 42, # The width of the border, in pixels.
+                        # Deprecated; the width is determined by the "style" field.
+                    "style": "A String", # The style of the border.
                   },
-                  "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                  "borders": { # The borders of the cell. # The borders of the cell.
-                    "top": { # A border along a cell. # The top border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
                           #
-                          # Example (Java):
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
                           #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
                     },
-                    "right": { # A border along a cell. # The right border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    "width": 42, # The width of the border, in pixels.
+                        # Deprecated; the width is determined by the "style" field.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
                           #
-                          # Example (Java):
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
                           #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
                     },
-                    "bottom": { # A border along a cell. # The bottom border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    "width": 42, # The width of the border, in pixels.
+                        # Deprecated; the width is determined by the "style" field.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
                           #
-                          # Example (Java):
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
                           #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
                     },
-                    "left": { # A border along a cell. # The left border of the cell.
-                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                          # for simplicity of conversion to/from color representations in various
-                          # languages over compactness; for example, the fields of this representation
-                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                          # method in iOS; and, with just a little work, it can be easily formatted into
-                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                          #
-                          # Example (Java):
-                          #
-                          #      import com.google.type.Color;
-                          #
-                          #      // ...
-                          #      public static java.awt.Color fromProto(Color protocolor) {
-                          #        float alpha = protocolor.hasAlpha()
-                          #            ? protocolor.getAlpha().getValue()
-                          #            : 1.0;
-                          #
-                          #        return new java.awt.Color(
-                          #            protocolor.getRed(),
-                          #            protocolor.getGreen(),
-                          #            protocolor.getBlue(),
-                          #            alpha);
-                          #      }
-                          #
-                          #      public static Color toProto(java.awt.Color color) {
-                          #        float red = (float) color.getRed();
-                          #        float green = (float) color.getGreen();
-                          #        float blue = (float) color.getBlue();
-                          #        float denominator = 255.0;
-                          #        Color.Builder resultBuilder =
-                          #            Color
-                          #                .newBuilder()
-                          #                .setRed(red / denominator)
-                          #                .setGreen(green / denominator)
-                          #                .setBlue(blue / denominator);
-                          #        int alpha = color.getAlpha();
-                          #        if (alpha != 255) {
-                          #          result.setAlpha(
-                          #              FloatValue
-                          #                  .newBuilder()
-                          #                  .setValue(((float) alpha) / denominator)
-                          #                  .build());
-                          #        }
-                          #        return resultBuilder.build();
-                          #      }
-                          #      // ...
-                          #
-                          # Example (iOS / Obj-C):
-                          #
-                          #      // ...
-                          #      static UIColor* fromProto(Color* protocolor) {
-                          #         float red = [protocolor red];
-                          #         float green = [protocolor green];
-                          #         float blue = [protocolor blue];
-                          #         FloatValue* alpha_wrapper = [protocolor alpha];
-                          #         float alpha = 1.0;
-                          #         if (alpha_wrapper != nil) {
-                          #           alpha = [alpha_wrapper value];
-                          #         }
-                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                          #      }
-                          #
-                          #      static Color* toProto(UIColor* color) {
-                          #          CGFloat red, green, blue, alpha;
-                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                          #            return nil;
-                          #          }
-                          #          Color* result = [Color alloc] init];
-                          #          [result setRed:red];
-                          #          [result setGreen:green];
-                          #          [result setBlue:blue];
-                          #          if (alpha <= 0.9999) {
-                          #            [result setAlpha:floatWrapperWithValue(alpha)];
-                          #          }
-                          #          [result autorelease];
-                          #          return result;
-                          #     }
-                          #     // ...
-                          #
-                          #  Example (JavaScript):
-                          #
-                          #     // ...
-                          #
-                          #     var protoToCssColor = function(rgb_color) {
-                          #        var redFrac = rgb_color.red || 0.0;
-                          #        var greenFrac = rgb_color.green || 0.0;
-                          #        var blueFrac = rgb_color.blue || 0.0;
-                          #        var red = Math.floor(redFrac * 255);
-                          #        var green = Math.floor(greenFrac * 255);
-                          #        var blue = Math.floor(blueFrac * 255);
-                          #
-                          #        if (!('alpha' in rgb_color)) {
-                          #           return rgbToCssColor_(red, green, blue);
-                          #        }
-                          #
-                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                          #        var rgbParams = [red, green, blue].join(',');
-                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                          #     };
-                          #
-                          #     var rgbToCssColor_ = function(red, green, blue) {
-                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                          #       var hexString = rgbNumber.toString(16);
-                          #       var missingZeros = 6 - hexString.length;
-                          #       var resultBuilder = ['#'];
-                          #       for (var i = 0; i < missingZeros; i++) {
-                          #          resultBuilder.push('0');
-                          #       }
-                          #       resultBuilder.push(hexString);
-                          #       return resultBuilder.join('');
-                          #     };
-                          #
-                          #     // ...
-                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                            # the final pixel color is defined by the equation:
-                            #
-                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                            #
-                            # This means that a value of 1.0 corresponds to a solid color, whereas
-                            # a value of 0.0 corresponds to a completely transparent color. This
-                            # uses a wrapper message rather than a simple float scalar so that it is
-                            # possible to distinguish between a default value and the value being unset.
-                            # If omitted, this color object is to be rendered as a solid color
-                            # (as if the alpha value had been explicitly given with a value of 1.0).
-                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                      },
-                      "width": 42, # The width of the border, in pixels.
-                          # Deprecated; the width is determined by the "style" field.
-                      "style": "A String", # The style of the border.
-                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Deprecated; the width is determined by the "style" field.
+                    "style": "A String", # The style of the border.
                   },
-                  "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
                 },
-              },
-              "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
-                  # the interpolation points listed. The format of a cell will vary
-                  # based on its contents as compared to the values of the interpolation
-                  # points.
-                "maxpoint": { # A single interpolation point on a gradient conditional format. # The final interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
-                "midpoint": { # A single interpolation point on a gradient conditional format. # An optional midway interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
-                "minpoint": { # A single interpolation point on a gradient conditional format. # The starting interpolation point.
-                    # These pin the gradient color scale according to the color,
-                    # type and value chosen.
-                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
-                      # for simplicity of conversion to/from color representations in various
-                      # languages over compactness; for example, the fields of this representation
-                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                      # method in iOS; and, with just a little work, it can be easily formatted into
-                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                      #
-                      # Example (Java):
-                      #
-                      #      import com.google.type.Color;
-                      #
-                      #      // ...
-                      #      public static java.awt.Color fromProto(Color protocolor) {
-                      #        float alpha = protocolor.hasAlpha()
-                      #            ? protocolor.getAlpha().getValue()
-                      #            : 1.0;
-                      #
-                      #        return new java.awt.Color(
-                      #            protocolor.getRed(),
-                      #            protocolor.getGreen(),
-                      #            protocolor.getBlue(),
-                      #            alpha);
-                      #      }
-                      #
-                      #      public static Color toProto(java.awt.Color color) {
-                      #        float red = (float) color.getRed();
-                      #        float green = (float) color.getGreen();
-                      #        float blue = (float) color.getBlue();
-                      #        float denominator = 255.0;
-                      #        Color.Builder resultBuilder =
-                      #            Color
-                      #                .newBuilder()
-                      #                .setRed(red / denominator)
-                      #                .setGreen(green / denominator)
-                      #                .setBlue(blue / denominator);
-                      #        int alpha = color.getAlpha();
-                      #        if (alpha != 255) {
-                      #          result.setAlpha(
-                      #              FloatValue
-                      #                  .newBuilder()
-                      #                  .setValue(((float) alpha) / denominator)
-                      #                  .build());
-                      #        }
-                      #        return resultBuilder.build();
-                      #      }
-                      #      // ...
-                      #
-                      # Example (iOS / Obj-C):
-                      #
-                      #      // ...
-                      #      static UIColor* fromProto(Color* protocolor) {
-                      #         float red = [protocolor red];
-                      #         float green = [protocolor green];
-                      #         float blue = [protocolor blue];
-                      #         FloatValue* alpha_wrapper = [protocolor alpha];
-                      #         float alpha = 1.0;
-                      #         if (alpha_wrapper != nil) {
-                      #           alpha = [alpha_wrapper value];
-                      #         }
-                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                      #      }
-                      #
-                      #      static Color* toProto(UIColor* color) {
-                      #          CGFloat red, green, blue, alpha;
-                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                      #            return nil;
-                      #          }
-                      #          Color* result = [Color alloc] init];
-                      #          [result setRed:red];
-                      #          [result setGreen:green];
-                      #          [result setBlue:blue];
-                      #          if (alpha <= 0.9999) {
-                      #            [result setAlpha:floatWrapperWithValue(alpha)];
-                      #          }
-                      #          [result autorelease];
-                      #          return result;
-                      #     }
-                      #     // ...
-                      #
-                      #  Example (JavaScript):
-                      #
-                      #     // ...
-                      #
-                      #     var protoToCssColor = function(rgb_color) {
-                      #        var redFrac = rgb_color.red || 0.0;
-                      #        var greenFrac = rgb_color.green || 0.0;
-                      #        var blueFrac = rgb_color.blue || 0.0;
-                      #        var red = Math.floor(redFrac * 255);
-                      #        var green = Math.floor(greenFrac * 255);
-                      #        var blue = Math.floor(blueFrac * 255);
-                      #
-                      #        if (!('alpha' in rgb_color)) {
-                      #           return rgbToCssColor_(red, green, blue);
-                      #        }
-                      #
-                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                      #        var rgbParams = [red, green, blue].join(',');
-                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                      #     };
-                      #
-                      #     var rgbToCssColor_ = function(red, green, blue) {
-                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                      #       var hexString = rgbNumber.toString(16);
-                      #       var missingZeros = 6 - hexString.length;
-                      #       var resultBuilder = ['#'];
-                      #       for (var i = 0; i < missingZeros; i++) {
-                      #          resultBuilder.push('0');
-                      #       }
-                      #       resultBuilder.push(hexString);
-                      #       return resultBuilder.join('');
-                      #     };
-                      #
-                      #     // ...
-                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                        # the final pixel color is defined by the equation:
-                        #
-                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                        #
-                        # This means that a value of 1.0 corresponds to a solid color, whereas
-                        # a value of 0.0 corresponds to a completely transparent color. This
-                        # uses a wrapper message rather than a simple float scalar so that it is
-                        # possible to distinguish between a default value and the value being unset.
-                        # If omitted, this color object is to be rendered as a solid color
-                        # (as if the alpha value had been explicitly given with a value of 1.0).
-                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                  },
-                  "type": "A String", # How the value should be interpreted.
-                  "value": "A String", # The value this interpolation point uses.  May be a formula.
-                      # Unused if type is MIN or
-                      # MAX.
-                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
               },
             },
-          ],
-          "merges": [ # The ranges that are merged together.
-            { # A range on a sheet.
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point on a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point on a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point on a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        ],
+        "bandedRanges": [ # The banded (i.e. alternating colors) ranges on this sheet.
+          { # A banded (alternating colors) range in a sheet.
+            "range": { # A range on a sheet. # The range over which these properties are applied.
                 # All indexes are zero-based.
                 # Indexes are half open, e.g the start index is inclusive
                 # and the end index is exclusive -- [start_index, end_index).
@@ -31341,9 +43408,1667 @@
               "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
               "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
             },
+            "columnProperties": { # Properties referring a single dimension (either row or column). If both # Properties for column bands. These properties will be applied on a column-
+                # by-column basis throughout all the columns in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "rowProperties": { # Properties referring a single dimension (either row or column). If both # Properties for row bands. These properties will be applied on a row-by-row
+                # basis throughout all the rows in the range. At least one of
+                # row_properties or column_properties must be specified.
+                # BandedRange.row_properties and BandedRange.column_properties are
+                # set, the fill colors are applied to cells according to the following rules:
+                #
+                # * header_color and footer_color take priority over band colors.
+                # * first_band_color takes priority over second_band_color.
+                # * row_properties takes priority over column_properties.
+                #
+                # For example, the first row color takes priority over the first column
+                # color, but the first column color takes priority over the second row color.
+                # Similarly, the row header takes priority over the column header in the
+                # top left cell, but the column header takes priority over the first row
+                # color if the row header is not set.
+              "secondBandColor": { # Represents a color in the RGBA color space. This representation is designed # The second color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "headerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the first row or column. If this field is set, the first
+                  # row or column will be filled with this color and the colors will
+                  # alternate between first_band_color and second_band_color starting
+                  # from the second row or column. Otherwise, the first row or column will be
+                  # filled with first_band_color and the colors will proceed to alternate
+                  # as they normally would.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "footerColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the last row or column. If this field is not set, the last
+                  # row or column will be filled with either first_band_color or
+                  # second_band_color, depending on the color of the previous row or
+                  # column.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "firstBandColor": { # Represents a color in the RGBA color space. This representation is designed # The first color that is alternating. (Required)
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+            },
+            "bandedRangeId": 42, # The id of the banded range.
+          },
+        ],
+        "merges": [ # The ranges that are merged together.
+          { # A range on a sheet.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+        ],
+        "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+          "range": { # A range on a sheet. # The range the filter covers.
+              # All indexes are zero-based.
+              # Indexes are half open, e.g the start index is inclusive
+              # and the end index is exclusive -- [start_index, end_index).
+              # Missing indexes indicate the range is unbounded on that side.
+              #
+              # For example, if `"Sheet1"` is sheet ID 0, then:
+              #
+              #   `Sheet1!A1:A1 == sheet_id: 0,
+              #                   start_row_index: 0, end_row_index: 1,
+              #                   start_column_index: 0, end_column_index: 1`
+              #
+              #   `Sheet1!A3:B4 == sheet_id: 0,
+              #                   start_row_index: 2, end_row_index: 4,
+              #                   start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A:B == sheet_id: 0,
+              #                 start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1!A5:B == sheet_id: 0,
+              #                  start_row_index: 4,
+              #                  start_column_index: 0, end_column_index: 2`
+              #
+              #   `Sheet1 == sheet_id:0`
+              #
+              # The start index must always be less than or equal to the end index.
+              # If the start index equals the end index, then the range is empty.
+              # Empty ranges are typically not meaningful and are usually rendered in the
+              # UI as `#REF!`.
+            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+            "sheetId": 42, # The sheet this range is on.
+            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "sortSpecs": [ # The sort order per column. Later specifications are used when values
+              # are equal in the earlier specifications.
+            { # A sort order associated with a specific column or row.
+              "sortOrder": "A String", # The order data should be sorted.
+              "dimensionIndex": 42, # The dimension the sort should be applied to.
+            },
           ],
-          "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
-            "range": { # A range on a sheet. # The range the filter covers.
+          "criteria": { # The criteria for showing/hiding values per column.
+              # The map's key is the column index, and the value is the criteria for
+              # that column.
+            "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
+              "hiddenValues": [ # Values that should be hidden.
+                "A String",
+              ],
+              "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                  # (This does not override hiddenValues -- if a value is listed there,
+                  #  it will still be hidden.)
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+            },
+          },
+        },
+        "charts": [ # The specifications of every chart on this sheet.
+          { # A chart embedded in a sheet.
+            "chartId": 42, # The ID of the chart.
+            "position": { # The position of an embedded object such as a chart. # The position of the chart.
+              "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                  # is chosen for you. Used only when writing.
+              "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                  # is on its own sheet. Must be non-negative.
+              "overlayPosition": { # The location an object is overlaid on top of a grid. # The position at which the object is overlaid on top of a grid.
+                "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                    # All indexes are zero-based.
+                  "rowIndex": 42, # The row index of the coordinate.
+                  "columnIndex": 42, # The column index of the coordinate.
+                  "sheetId": 42, # The sheet this coordinate is on.
+                },
+                "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+              },
+            },
+            "spec": { # The specifications of a chart. # The specification of the chart.
+              "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+              "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # All indexes are zero-based.
+                          # Indexes are half open, e.g the start index is inclusive
+                          # and the end index is exclusive -- [start_index, end_index).
+                          # Missing indexes indicate the range is unbounded on that side.
+                          #
+                          # For example, if `"Sheet1"` is sheet ID 0, then:
+                          #
+                          #   `Sheet1!A1:A1 == sheet_id: 0,
+                          #                   start_row_index: 0, end_row_index: 1,
+                          #                   start_column_index: 0, end_column_index: 1`
+                          #
+                          #   `Sheet1!A3:B4 == sheet_id: 0,
+                          #                   start_row_index: 2, end_row_index: 4,
+                          #                   start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A:B == sheet_id: 0,
+                          #                 start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A5:B == sheet_id: 0,
+                          #                  start_row_index: 4,
+                          #                  start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1 == sheet_id:0`
+                          #
+                          # The start index must always be less than or equal to the end index.
+                          # If the start index equals the end index, then the range is empty.
+                          # Empty ranges are typically not meaningful and are usually rendered in the
+                          # UI as `#REF!`.
+                        "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                        "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                        "sheetId": 42, # The sheet this range is on.
+                        "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # All indexes are zero-based.
+                          # Indexes are half open, e.g the start index is inclusive
+                          # and the end index is exclusive -- [start_index, end_index).
+                          # Missing indexes indicate the range is unbounded on that side.
+                          #
+                          # For example, if `"Sheet1"` is sheet ID 0, then:
+                          #
+                          #   `Sheet1!A1:A1 == sheet_id: 0,
+                          #                   start_row_index: 0, end_row_index: 1,
+                          #                   start_column_index: 0, end_column_index: 1`
+                          #
+                          #   `Sheet1!A3:B4 == sheet_id: 0,
+                          #                   start_row_index: 2, end_row_index: 4,
+                          #                   start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A:B == sheet_id: 0,
+                          #                 start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A5:B == sheet_id: 0,
+                          #                  start_row_index: 4,
+                          #                  start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1 == sheet_id:0`
+                          #
+                          # The start index must always be less than or equal to the end index.
+                          # If the start index equals the end index, then the range is empty.
+                          # Empty ranges are typically not meaningful and are usually rendered in the
+                          # UI as `#REF!`.
+                        "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                        "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                        "sheetId": 42, # The sheet this range is on.
+                        "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "threeDimensional": True or False, # True if the pie is three dimensional.
+                "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                "pieHole": 3.14, # The size of the hole in the pie chart.
+              },
+              "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                  # See BasicChartType for the list of all
+                  # charts this supports.
+                  # of charts this supports.
+                "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                    # If not set, Google Sheets will guess how many rows are headers based
+                    # on the data.
+                    #
+                    # (Note that BasicChartAxis.title may override the axis title
+                    #  inferred from the header values.)
+                "series": [ # The data this chart is visualizing.
+                  { # A single series of data in a chart.
+                      # For example, if charting stock prices over time, multiple series may exist,
+                      # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                    "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # All indexes are zero-based.
+                              # Indexes are half open, e.g the start index is inclusive
+                              # and the end index is exclusive -- [start_index, end_index).
+                              # Missing indexes indicate the range is unbounded on that side.
+                              #
+                              # For example, if `"Sheet1"` is sheet ID 0, then:
+                              #
+                              #   `Sheet1!A1:A1 == sheet_id: 0,
+                              #                   start_row_index: 0, end_row_index: 1,
+                              #                   start_column_index: 0, end_column_index: 1`
+                              #
+                              #   `Sheet1!A3:B4 == sheet_id: 0,
+                              #                   start_row_index: 2, end_row_index: 4,
+                              #                   start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1!A:B == sheet_id: 0,
+                              #                 start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1!A5:B == sheet_id: 0,
+                              #                  start_row_index: 4,
+                              #                  start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1 == sheet_id:0`
+                              #
+                              # The start index must always be less than or equal to the end index.
+                              # If the start index equals the end index, then the range is empty.
+                              # Empty ranges are typically not meaningful and are usually rendered in the
+                              # UI as `#REF!`.
+                            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                            "sheetId": 42, # The sheet this range is on.
+                            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                    "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                        # For example, if charting stocks over time, the "Volume" series
+                        # may want to be pinned to the right with the prices pinned to the left,
+                        # because the scale of trading volume is different than the scale of
+                        # prices.
+                        # It is an error to specify an axis that isn't a valid minor axis
+                        # for the chart's type.
+                    "type": "A String", # The type of this series. Valid only if the
+                        # chartType is
+                        # COMBO.
+                        # Different types will change the way the series is visualized.
+                        # Only LINE, AREA,
+                        # and COLUMN are supported.
+                  },
+                ],
+                "legendPosition": "A String", # The position of the chart legend.
+                "domains": [ # The domain of data this is charting.
+                    # Only a single domain is currently supported.
+                  { # The domain of a chart.
+                      # For example, if charting stock prices over time, this would be the date.
+                    "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                        # this is the data representing the dates.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # All indexes are zero-based.
+                              # Indexes are half open, e.g the start index is inclusive
+                              # and the end index is exclusive -- [start_index, end_index).
+                              # Missing indexes indicate the range is unbounded on that side.
+                              #
+                              # For example, if `"Sheet1"` is sheet ID 0, then:
+                              #
+                              #   `Sheet1!A1:A1 == sheet_id: 0,
+                              #                   start_row_index: 0, end_row_index: 1,
+                              #                   start_column_index: 0, end_column_index: 1`
+                              #
+                              #   `Sheet1!A3:B4 == sheet_id: 0,
+                              #                   start_row_index: 2, end_row_index: 4,
+                              #                   start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1!A:B == sheet_id: 0,
+                              #                 start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1!A5:B == sheet_id: 0,
+                              #                  start_row_index: 4,
+                              #                  start_column_index: 0, end_column_index: 2`
+                              #
+                              #   `Sheet1 == sheet_id:0`
+                              #
+                              # The start index must always be less than or equal to the end index.
+                              # If the start index equals the end index, then the range is empty.
+                              # Empty ranges are typically not meaningful and are usually rendered in the
+                              # UI as `#REF!`.
+                            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                            "sheetId": 42, # The sheet this range is on.
+                            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                  },
+                ],
+                "chartType": "A String", # The type of the chart.
+                "axis": [ # The axis on the chart.
+                  { # An axis of the chart.
+                      # A chart may not have more than one axis per
+                      # axis position.
+                    "position": "A String", # The position of this axis.
+                    "format": { # The format of a run of text in a cell. # The format of the title.
+                        # Only valid if the axis is not associated with the domain.
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                        # from headers of the data.
+                  },
+                ],
+              },
+              "title": "A String", # The title of the chart.
+            },
+          },
+        ],
+        "filterViews": [ # The filter views in this sheet.
+          { # A filter view.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or named_range_id
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or named_range_id
+                # may be set.
                 # All indexes are zero-based.
                 # Indexes are half open, e.g the start index is inclusive
                 # and the end index is exclusive -- [start_index, end_index).
@@ -31422,309 +45147,566 @@
               },
             },
           },
-          "charts": [ # The specifications of every chart on this sheet.
-            { # A chart embedded in a sheet.
-              "chartId": 42, # The ID of the chart.
-              "position": { # The position of an embedded object such as a chart. # The position of the chart.
-                "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
-                    # is chosen for you. Used only when writing.
-                "sheetId": 42, # The sheet this is on. Set only if the embedded object
-                    # is on its own sheet. Must be non-negative.
-                "overlayPosition": { # The location an object is overlaid on top of a grid. # The position at which the object is overlaid on top of a grid.
-                  "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
-                      # All indexes are zero-based.
-                    "rowIndex": 42, # The row index of the coordinate.
-                    "columnIndex": 42, # The column index of the coordinate.
-                    "sheetId": 42, # The sheet this coordinate is on.
-                  },
-                  "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
-                      # from the anchor cell.
-                  "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
-                  "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
-                      # from the anchor cell.
-                  "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
-                },
+        ],
+        "protectedRanges": [ # The protected ranges in this sheet.
+          { # A protected range.
+            "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                # Unprotected ranges are only supported on protected sheets.
+              { # A range on a sheet.
+                  # All indexes are zero-based.
+                  # Indexes are half open, e.g the start index is inclusive
+                  # and the end index is exclusive -- [start_index, end_index).
+                  # Missing indexes indicate the range is unbounded on that side.
+                  #
+                  # For example, if `"Sheet1"` is sheet ID 0, then:
+                  #
+                  #   `Sheet1!A1:A1 == sheet_id: 0,
+                  #                   start_row_index: 0, end_row_index: 1,
+                  #                   start_column_index: 0, end_column_index: 1`
+                  #
+                  #   `Sheet1!A3:B4 == sheet_id: 0,
+                  #                   start_row_index: 2, end_row_index: 4,
+                  #                   start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A:B == sheet_id: 0,
+                  #                 start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1!A5:B == sheet_id: 0,
+                  #                  start_row_index: 4,
+                  #                  start_column_index: 0, end_column_index: 2`
+                  #
+                  #   `Sheet1 == sheet_id:0`
+                  #
+                  # The start index must always be less than or equal to the end index.
+                  # If the start index equals the end index, then the range is empty.
+                  # Empty ranges are typically not meaningful and are usually rendered in the
+                  # UI as `#REF!`.
+                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                "sheetId": 42, # The sheet this range is on.
+                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
               },
-              "spec": { # The specifications of a chart. # The specification of the chart.
-                "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
-                "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
-                  "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
-                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                      "sources": [ # The ranges of data for a series or domain.
-                          # Exactly one dimension must have a length of 1,
-                          # and all sources in the list must have the same dimension
-                          # with length 1.
-                          # The domain (if it exists) & all series must have the same number
-                          # of source ranges. If using more than one source range, then the source
-                          # range at a given offset must be contiguous across the domain and series.
-                          #
-                          # For example, these are valid configurations:
-                          #
-                          #     domain sources: A1:A5
-                          #     series1 sources: B1:B5
-                          #     series2 sources: D6:D10
-                          #
-                          #     domain sources: A1:A5, C10:C12
-                          #     series1 sources: B1:B5, D10:D12
-                          #     series2 sources: C1:C5, E10:E12
-                        { # A range on a sheet.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                      ],
-                    },
-                  },
-                  "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
-                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                      "sources": [ # The ranges of data for a series or domain.
-                          # Exactly one dimension must have a length of 1,
-                          # and all sources in the list must have the same dimension
-                          # with length 1.
-                          # The domain (if it exists) & all series must have the same number
-                          # of source ranges. If using more than one source range, then the source
-                          # range at a given offset must be contiguous across the domain and series.
-                          #
-                          # For example, these are valid configurations:
-                          #
-                          #     domain sources: A1:A5
-                          #     series1 sources: B1:B5
-                          #     series2 sources: D6:D10
-                          #
-                          #     domain sources: A1:A5, C10:C12
-                          #     series1 sources: B1:B5, D10:D12
-                          #     series2 sources: C1:C5, E10:E12
-                        { # A range on a sheet.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                      ],
-                    },
-                  },
-                  "threeDimensional": True or False, # True if the pie is three dimensional.
-                  "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
-                  "pieHole": 3.14, # The size of the hole in the pie chart.
-                },
-                "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
-                    # See BasicChartType for the list of all
-                    # charts this supports.
-                    # of charts this supports.
-                  "headerCount": 42, # The number of rows or columns in the data that are "headers".
-                      # If not set, Google Sheets will guess how many rows are headers based
-                      # on the data.
-                      #
-                      # (Note that BasicChartAxis.title may override the axis title
-                      #  inferred from the header values.)
-                  "series": [ # The data this chart is visualizing.
-                    { # A single series of data in a chart.
-                        # For example, if charting stock prices over time, multiple series may exist,
-                        # one for the "Open Price", "High Price", "Low Price" and "Close Price".
-                      "series": { # The data included in a domain or series. # The data being visualized in this chart series.
-                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                          "sources": [ # The ranges of data for a series or domain.
-                              # Exactly one dimension must have a length of 1,
-                              # and all sources in the list must have the same dimension
-                              # with length 1.
-                              # The domain (if it exists) & all series must have the same number
-                              # of source ranges. If using more than one source range, then the source
-                              # range at a given offset must be contiguous across the domain and series.
-                              #
-                              # For example, these are valid configurations:
-                              #
-                              #     domain sources: A1:A5
-                              #     series1 sources: B1:B5
-                              #     series2 sources: D6:D10
-                              #
-                              #     domain sources: A1:A5, C10:C12
-                              #     series1 sources: B1:B5, D10:D12
-                              #     series2 sources: C1:C5, E10:E12
-                            { # A range on a sheet.
-                                # All indexes are zero-based.
-                                # Indexes are half open, e.g the start index is inclusive
-                                # and the end index is exclusive -- [start_index, end_index).
-                                # Missing indexes indicate the range is unbounded on that side.
-                                #
-                                # For example, if `"Sheet1"` is sheet ID 0, then:
-                                #
-                                #   `Sheet1!A1:A1 == sheet_id: 0,
-                                #                   start_row_index: 0, end_row_index: 1,
-                                #                   start_column_index: 0, end_column_index: 1`
-                                #
-                                #   `Sheet1!A3:B4 == sheet_id: 0,
-                                #                   start_row_index: 2, end_row_index: 4,
-                                #                   start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A:B == sheet_id: 0,
-                                #                 start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A5:B == sheet_id: 0,
-                                #                  start_row_index: 4,
-                                #                  start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1 == sheet_id:0`
-                                #
-                                # The start index must always be less than or equal to the end index.
-                                # If the start index equals the end index, then the range is empty.
-                                # Empty ranges are typically not meaningful and are usually rendered in the
-                                # UI as `#REF!`.
-                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                              "sheetId": 42, # The sheet this range is on.
-                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            ],
+            "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                # protected area.
+                # This field is read-only.
+            "description": "A String", # The description of this protected range.
+            "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                #
+                # When writing, only one of range or named_range_id
+                # may be set.
+            "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                # This field is only visible to users with edit access to the protected
+                # range and the document.
+                # Editors are not supported with warning_only protection.
+              "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                  # range.  Domain protection is only supported on documents within a domain.
+              "users": [ # The email addresses of users with edit access to the protected range.
+                "A String",
+              ],
+              "groups": [ # The email addresses of groups with edit access to the protected range.
+                "A String",
+              ],
+            },
+            "protectedRangeId": 42, # The ID of the protected range.
+                # This field is read-only.
+            "warningOnly": True or False, # True if this protected range will show a warning when editing.
+                # Warning-based protection means that every user can edit data in the
+                # protected range, except editing will prompt a warning asking the user
+                # to confirm the edit.
+                #
+                # When writing: if this field is true, then editors is ignored.
+                # Additionally, if this field is changed from true to false and the
+                # `editors` field is not set (nor included in the field mask), then
+                # the editors will be set to all the editors in the document.
+            "range": { # A range on a sheet. # The range that is being protected.
+                # The range may be fully unbounded, in which case this is considered
+                # a protected sheet.
+                #
+                # When writing, only one of range or named_range_id
+                # may be set.
+                # All indexes are zero-based.
+                # Indexes are half open, e.g the start index is inclusive
+                # and the end index is exclusive -- [start_index, end_index).
+                # Missing indexes indicate the range is unbounded on that side.
+                #
+                # For example, if `"Sheet1"` is sheet ID 0, then:
+                #
+                #   `Sheet1!A1:A1 == sheet_id: 0,
+                #                   start_row_index: 0, end_row_index: 1,
+                #                   start_column_index: 0, end_column_index: 1`
+                #
+                #   `Sheet1!A3:B4 == sheet_id: 0,
+                #                   start_row_index: 2, end_row_index: 4,
+                #                   start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A:B == sheet_id: 0,
+                #                 start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1!A5:B == sheet_id: 0,
+                #                  start_row_index: 4,
+                #                  start_column_index: 0, end_column_index: 2`
+                #
+                #   `Sheet1 == sheet_id:0`
+                #
+                # The start index must always be less than or equal to the end index.
+                # If the start index equals the end index, then the range is empty.
+                # Empty ranges are typically not meaningful and are usually rendered in the
+                # UI as `#REF!`.
+              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+              "sheetId": 42, # The sheet this range is on.
+              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          },
+        ],
+        "data": [ # Data in the grid, if this is a grid sheet.
+            # The number of GridData objects returned is dependent on the number of
+            # ranges requested on this sheet. For example, if this is representing
+            # `Sheet1`, and the spreadsheet was requested with ranges
+            # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+            # startRow/startColumn of `0`,
+            # while the second one will have `startRow 14` (zero-based row 15),
+            # and `startColumn 3` (zero-based column D).
+          { # Data in the grid, as well as metadata about the dimensions.
+            "startRow": 42, # The first row this GridData refers to, zero-based.
+            "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+                # in start_row.
+              { # Properties about a dimension.
+                "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                    # This field is read-only.
+              },
+            ],
+            "startColumn": 42, # The first column this GridData refers to, zero-based.
+            "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+                # in start_column.
+              { # Properties about a dimension.
+                "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                    # This field is read-only.
+              },
+            ],
+            "rowData": [ # The data in the grid, one entry per row,
+                # starting with the row in startRow.
+                # The values in RowData will correspond to columns starting
+                # at start_column.
+              { # Data about each cell in a row.
+                "values": [ # The values in the row, one per column.
+                  { # Data about a specific cell.
+                    "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                        # is computed dynamically based on its data, grouping, filters, values,
+                        # etc. Only the top-left cell of the pivot table contains the pivot table
+                        # definition. The other cells will contain the calculated values of the
+                        # results of the pivot in their effective_value fields.
+                      "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                          # or vertically (as rows).
+                      "rows": [ # Each row grouping in the pivot table.
+                        { # A single grouping (either row or column) in a pivot table.
+                          "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                          "valueMetadata": [ # Metadata about values in the grouping.
+                            { # Metadata about a value in a pivot grouping.
+                              "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                              "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                  # (Note that formulaValue is not valid,
+                                  #  because the values will be calculated.)
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
                             },
                           ],
+                          "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                              # If not specified, sorting is alphabetical by this group's values.
+                            "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                #
+                                # For example, in a pivot table with one row group & two column groups,
+                                # the row group can list up to two values. The first value corresponds
+                                # to a value within the first column group, and the second value
+                                # corresponds to a value in the second column group.  If no values
+                                # are listed, this would indicate that the row should be sorted according
+                                # to the "Grand Total" over the column groups. If a single value is listed,
+                                # this would correspond to using the "Total" of that bucket.
+                              { # The kinds of value that a cell in a spreadsheet can have.
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            ],
+                            "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                                # grouping should be sorted by.
+                          },
+                          "sortOrder": "A String", # The order the values in this group should be sorted.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                              #
+                              # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                              # means this group refers to column `C`, whereas the offset `1` would refer
+                              # to column `D`.
+                        },
+                      ],
+                      "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                          # All indexes are zero-based.
+                          # Indexes are half open, e.g the start index is inclusive
+                          # and the end index is exclusive -- [start_index, end_index).
+                          # Missing indexes indicate the range is unbounded on that side.
+                          #
+                          # For example, if `"Sheet1"` is sheet ID 0, then:
+                          #
+                          #   `Sheet1!A1:A1 == sheet_id: 0,
+                          #                   start_row_index: 0, end_row_index: 1,
+                          #                   start_column_index: 0, end_column_index: 1`
+                          #
+                          #   `Sheet1!A3:B4 == sheet_id: 0,
+                          #                   start_row_index: 2, end_row_index: 4,
+                          #                   start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A:B == sheet_id: 0,
+                          #                 start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1!A5:B == sheet_id: 0,
+                          #                  start_row_index: 4,
+                          #                  start_column_index: 0, end_column_index: 2`
+                          #
+                          #   `Sheet1 == sheet_id:0`
+                          #
+                          # The start index must always be less than or equal to the end index.
+                          # If the start index equals the end index, then the range is empty.
+                          # Empty ranges are typically not meaningful and are usually rendered in the
+                          # UI as `#REF!`.
+                        "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
+                        "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
+                        "sheetId": 42, # The sheet this range is on.
+                        "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                      "values": [ # A list of values to include in the pivot table.
+                        { # The definition of how a value in a pivot table should be calculated.
+                          "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                              # with an `=` character.
+                          "summarizeFunction": "A String", # A function to summarize the value.
+                              # If formula is set, the only supported values are
+                              # SUM and
+                              # CUSTOM.
+                              # If sourceColumnOffset is set, then `CUSTOM`
+                              # is not supported.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                              #
+                              # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                              # means this value refers to column `C`, whereas the offset `1` would
+                              # refer to column `D`.
+                          "name": "A String", # A name to use for the value. This is only used if formula was set.
+                              # Otherwise, the column name is used.
+                        },
+                      ],
+                      "criteria": { # An optional mapping of filters per source column offset.
+                          #
+                          # The filters will be applied before aggregating data into the pivot table.
+                          # The map's key is the column offset of the source range that you want to
+                          # filter, and the value is the criteria for that column.
+                          #
+                          # For example, if the source was `C10:E15`, a key of `0` will have the filter
+                          # for column `C`, whereas the key `1` is for column `D`.
+                        "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                          "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                            "A String",
+                          ],
                         },
                       },
-                      "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
-                          # For example, if charting stocks over time, the "Volume" series
-                          # may want to be pinned to the right with the prices pinned to the left,
-                          # because the scale of trading volume is different than the scale of
-                          # prices.
-                          # It is an error to specify an axis that isn't a valid minor axis
-                          # for the chart's type.
-                      "type": "A String", # The type of this series. Valid only if the
-                          # chartType is
-                          # COMBO.
-                          # Different types will change the way the series is visualized.
-                          # Only LINE, AREA,
-                          # and COLUMN are supported.
-                    },
-                  ],
-                  "legendPosition": "A String", # The position of the chart legend.
-                  "domains": [ # The domain of data this is charting.
-                      # Only a single domain is currently supported.
-                    { # The domain of a chart.
-                        # For example, if charting stock prices over time, this would be the date.
-                      "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
-                          # this is the data representing the dates.
-                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
-                          "sources": [ # The ranges of data for a series or domain.
-                              # Exactly one dimension must have a length of 1,
-                              # and all sources in the list must have the same dimension
-                              # with length 1.
-                              # The domain (if it exists) & all series must have the same number
-                              # of source ranges. If using more than one source range, then the source
-                              # range at a given offset must be contiguous across the domain and series.
-                              #
-                              # For example, these are valid configurations:
-                              #
-                              #     domain sources: A1:A5
-                              #     series1 sources: B1:B5
-                              #     series2 sources: D6:D10
-                              #
-                              #     domain sources: A1:A5, C10:C12
-                              #     series1 sources: B1:B5, D10:D12
-                              #     series2 sources: C1:C5, E10:E12
-                            { # A range on a sheet.
-                                # All indexes are zero-based.
-                                # Indexes are half open, e.g the start index is inclusive
-                                # and the end index is exclusive -- [start_index, end_index).
-                                # Missing indexes indicate the range is unbounded on that side.
-                                #
-                                # For example, if `"Sheet1"` is sheet ID 0, then:
-                                #
-                                #   `Sheet1!A1:A1 == sheet_id: 0,
-                                #                   start_row_index: 0, end_row_index: 1,
-                                #                   start_column_index: 0, end_column_index: 1`
-                                #
-                                #   `Sheet1!A3:B4 == sheet_id: 0,
-                                #                   start_row_index: 2, end_row_index: 4,
-                                #                   start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A:B == sheet_id: 0,
-                                #                 start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1!A5:B == sheet_id: 0,
-                                #                  start_row_index: 4,
-                                #                  start_column_index: 0, end_column_index: 2`
-                                #
-                                #   `Sheet1 == sheet_id:0`
-                                #
-                                # The start index must always be less than or equal to the end index.
-                                # If the start index equals the end index, then the range is empty.
-                                # Empty ranges are typically not meaningful and are usually rendered in the
-                                # UI as `#REF!`.
-                              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                              "sheetId": 42, # The sheet this range is on.
-                              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      "columns": [ # Each column grouping in the pivot table.
+                        { # A single grouping (either row or column) in a pivot table.
+                          "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                          "valueMetadata": [ # Metadata about values in the grouping.
+                            { # Metadata about a value in a pivot grouping.
+                              "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                              "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                  # (Note that formulaValue is not valid,
+                                  #  because the values will be calculated.)
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
                             },
                           ],
+                          "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                              # If not specified, sorting is alphabetical by this group's values.
+                            "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                #
+                                # For example, in a pivot table with one row group & two column groups,
+                                # the row group can list up to two values. The first value corresponds
+                                # to a value within the first column group, and the second value
+                                # corresponds to a value in the second column group.  If no values
+                                # are listed, this would indicate that the row should be sorted according
+                                # to the "Grand Total" over the column groups. If a single value is listed,
+                                # this would correspond to using the "Total" of that bucket.
+                              { # The kinds of value that a cell in a spreadsheet can have.
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            ],
+                            "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
+                                # grouping should be sorted by.
+                          },
+                          "sortOrder": "A String", # The order the values in this group should be sorted.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                              #
+                              # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
+                              # means this group refers to column `C`, whereas the offset `1` would refer
+                              # to column `D`.
                         },
+                      ],
+                    },
+                    "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                        # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                    "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                        # the calculated value.  For cells with literals, this will be
+                        # the same as the user_entered_value.
+                        # This field is read-only.
+                      "numberValue": 3.14, # Represents a double value.
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # "serial number" format.
+                      "boolValue": True or False, # Represents a boolean value.
+                      "formulaValue": "A String", # Represents a formula.
+                      "stringValue": "A String", # Represents a string value.
+                          # Leading single quotes are not included. For example, if the user typed
+                          # `'123` into the UI, this would be represented as a `stringValue` of
+                          # `"123"`.
+                      "errorValue": { # An error in a cell. # Represents an error.
+                          # This field is read-only.
+                        "message": "A String", # A message with more information about the error
+                            # (in the spreadsheet's locale).
+                        "type": "A String", # The type of error.
                       },
                     },
-                  ],
-                  "chartType": "A String", # The type of the chart.
-                  "axis": [ # The axis on the chart.
-                    { # An axis of the chart.
-                        # A chart may not have more than one axis per
-                        # axis position.
-                      "position": "A String", # The position of this axis.
-                      "format": { # The format of a run of text in a cell. # The format of the title.
-                          # Only valid if the axis is not associated with the domain.
+                    "formattedValue": "A String", # The formatted value of the cell.
+                        # This is the value as it's shown to the user.
+                        # This field is read-only.
+                    "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # serial number format.
+                      "numberValue": 3.14, # Represents a double value.
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # "serial number" format.
+                      "boolValue": True or False, # Represents a boolean value.
+                      "formulaValue": "A String", # Represents a formula.
+                      "stringValue": "A String", # Represents a string value.
+                          # Leading single quotes are not included. For example, if the user typed
+                          # `'123` into the UI, this would be represented as a `stringValue` of
+                          # `"123"`.
+                      "errorValue": { # An error in a cell. # Represents an error.
+                          # This field is read-only.
+                        "message": "A String", # A message with more information about the error
+                            # (in the spreadsheet's locale).
+                        "type": "A String", # The type of error.
+                      },
+                    },
+                    "note": "A String", # Any note on the cell.
+                    "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                        # This includes the results of applying any conditional formatting and,
+                        # if the cell contains a formula, the computed number format.
+                        # If the effective format is the default format, effective format will
+                        # not be written.
+                        # This field is read-only.
+                      "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                            # the user's locale will be used if necessary for the given type.
+                            # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                            # information about the supported patterns.
+                        "type": "A String", # The type of the number format.
+                            # When writing, this field must be set.
+                      },
+                      "textDirection": "A String", # The direction of the text in the cell.
+                      "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                          # When updating padding, every field must be specified.
+                        "top": 42, # The top padding of the cell.
+                        "right": 42, # The right padding of the cell.
+                        "bottom": 42, # The bottom padding of the cell.
+                        "left": 42, # The left padding of the cell.
+                      },
+                      "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                      "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                      "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
                           # Absent values indicate that the field isn't specified.
                         "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
                             # for simplicity of conversion to/from color representations in various
@@ -31862,2519 +45844,1731 @@
                         "italic": True or False, # True if the text is italicized.
                         "underline": True or False, # True if the text is underlined.
                       },
-                      "title": "A String", # The title of this axis. If set, this overrides any title inferred
-                          # from headers of the data.
+                      "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                      "borders": { # The borders of the cell. # The borders of the cell.
+                        "top": { # A border along a cell. # The top border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "right": { # A border along a cell. # The right border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "bottom": { # A border along a cell. # The bottom border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "left": { # A border along a cell. # The left border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                      },
+                      "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
                     },
-                  ],
-                },
-                "title": "A String", # The title of the chart.
-              },
-            },
-          ],
-          "filterViews": [ # The filter views in this sheet.
-            { # A filter view.
-              "title": "A String", # The name of the filter view.
-              "namedRangeId": "A String", # The named range this filter view is backed by, if any.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-              "filterViewId": 42, # The ID of the filter view.
-              "range": { # A range on a sheet. # The range this filter view covers.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-                  # All indexes are zero-based.
-                  # Indexes are half open, e.g the start index is inclusive
-                  # and the end index is exclusive -- [start_index, end_index).
-                  # Missing indexes indicate the range is unbounded on that side.
-                  #
-                  # For example, if `"Sheet1"` is sheet ID 0, then:
-                  #
-                  #   `Sheet1!A1:A1 == sheet_id: 0,
-                  #                   start_row_index: 0, end_row_index: 1,
-                  #                   start_column_index: 0, end_column_index: 1`
-                  #
-                  #   `Sheet1!A3:B4 == sheet_id: 0,
-                  #                   start_row_index: 2, end_row_index: 4,
-                  #                   start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A:B == sheet_id: 0,
-                  #                 start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A5:B == sheet_id: 0,
-                  #                  start_row_index: 4,
-                  #                  start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1 == sheet_id:0`
-                  #
-                  # The start index must always be less than or equal to the end index.
-                  # If the start index equals the end index, then the range is empty.
-                  # Empty ranges are typically not meaningful and are usually rendered in the
-                  # UI as `#REF!`.
-                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                "sheetId": 42, # The sheet this range is on.
-                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-              },
-              "sortSpecs": [ # The sort order per column. Later specifications are used when values
-                  # are equal in the earlier specifications.
-                { # A sort order associated with a specific column or row.
-                  "sortOrder": "A String", # The order data should be sorted.
-                  "dimensionIndex": 42, # The dimension the sort should be applied to.
-                },
-              ],
-              "criteria": { # The criteria for showing/hiding values per column.
-                  # The map's key is the column index, and the value is the criteria for
-                  # that column.
-                "a_key": { # Criteria for showing/hiding rows in a filter or filter view.
-                  "hiddenValues": [ # Values that should be hidden.
-                    "A String",
-                  ],
-                  "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
-                      # (This does not override hiddenValues -- if a value is listed there,
-                      #  it will still be hidden.)
-                      # BooleanConditions are used by conditional formatting,
-                      # data validation, and the criteria in filters.
-                    "type": "A String", # The type of condition.
-                    "values": [ # The values of the condition. The number of supported values depends
-                        # on the condition type.  Some support zero values,
-                        # others one or two values,
-                        # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                      { # The value of the condition.
-                        "relativeDate": "A String", # A relative date (based on the current date).
-                            # Valid only if the type is
-                            # DATE_BEFORE,
-                            # DATE_AFTER,
-                            # DATE_ON_OR_BEFORE or
-                            # DATE_ON_OR_AFTER.
+                    "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                        #
+                        # When writing, the new format will be merged with the existing format.
+                      "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
+                            # the user's locale will be used if necessary for the given type.
+                            # See the [Date and Number Formats guide](/sheets/guides/formats) for more
+                            # information about the supported patterns.
+                        "type": "A String", # The type of the number format.
+                            # When writing, this field must be set.
+                      },
+                      "textDirection": "A String", # The direction of the text in the cell.
+                      "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                          # When updating padding, every field must be specified.
+                        "top": 42, # The top padding of the cell.
+                        "right": 42, # The right padding of the cell.
+                        "bottom": 42, # The bottom padding of the cell.
+                        "left": 42, # The left padding of the cell.
+                      },
+                      "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
+                      "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
                             #
-                            # Relative dates are not supported in data validation.
-                            # They are supported only in conditional formatting and
-                            # conditional filters.
-                        "userEnteredValue": "A String", # A value the condition is based on.
-                            # The value will be parsed as if the user typed into a cell.
-                            # Formulas are supported (and must begin with an `=`).
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
+                      "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                      "borders": { # The borders of the cell. # The borders of the cell.
+                        "top": { # A border along a cell. # The top border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "right": { # A border along a cell. # The right border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "bottom": { # A border along a cell. # The bottom border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                        "left": { # A border along a cell. # The left border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Deprecated; the width is determined by the "style" field.
+                          "style": "A String", # The style of the border.
+                        },
+                      },
+                      "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                    },
+                    "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                        #
+                        # When writing, the new data validation rule will overwrite any prior rule.
+                      "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                          # If true, "List" conditions will show a dropdown.
+                      "strict": True or False, # True if invalid data should be rejected.
+                      "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                      "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                          # BooleanConditions are used by conditional formatting,
+                          # data validation, and the criteria in filters.
+                        "type": "A String", # The type of condition.
+                        "values": [ # The values of the condition. The number of supported values depends
+                            # on the condition type.  Some support zero values,
+                            # others one or two values,
+                            # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                          { # The value of the condition.
+                            "relativeDate": "A String", # A relative date (based on the current date).
+                                # Valid only if the type is
+                                # DATE_BEFORE,
+                                # DATE_AFTER,
+                                # DATE_ON_OR_BEFORE or
+                                # DATE_ON_OR_AFTER.
+                                #
+                                # Relative dates are not supported in data validation.
+                                # They are supported only in conditional formatting and
+                                # conditional filters.
+                            "userEnteredValue": "A String", # A value the condition is based on.
+                                # The value will be parsed as if the user typed into a cell.
+                                # Formulas are supported (and must begin with an `=`).
+                          },
+                        ],
+                      },
+                    },
+                    "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.  Runs are only valid
+                        # on user entered strings, not formulas, bools, or numbers.
+                        # Runs start at specific indexes in the text and continue until the next
+                        # run. Properties of a run will continue unless explicitly changed
+                        # in a subsequent run (and properties of the first run will continue
+                        # the properties of the cell unless explicitly changed).
+                        #
+                        # When writing, the new runs will overwrite any prior runs.  When writing a
+                        # new user_entered_value, previous runs will be erased.
+                      { # A run of a text format. The format of this run continues until the start
+                          # index of the next run.
+                          # When updating, all fields must be set.
+                        "startIndex": 42, # The character index where this run starts.
+                        "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
                       },
                     ],
                   },
-                },
-              },
-            },
-          ],
-          "protectedRanges": [ # The protected ranges in this sheet.
-            { # A protected range.
-              "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
-                  # Unprotected ranges are only supported on protected sheets.
-                { # A range on a sheet.
-                    # All indexes are zero-based.
-                    # Indexes are half open, e.g the start index is inclusive
-                    # and the end index is exclusive -- [start_index, end_index).
-                    # Missing indexes indicate the range is unbounded on that side.
-                    #
-                    # For example, if `"Sheet1"` is sheet ID 0, then:
-                    #
-                    #   `Sheet1!A1:A1 == sheet_id: 0,
-                    #                   start_row_index: 0, end_row_index: 1,
-                    #                   start_column_index: 0, end_column_index: 1`
-                    #
-                    #   `Sheet1!A3:B4 == sheet_id: 0,
-                    #                   start_row_index: 2, end_row_index: 4,
-                    #                   start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A:B == sheet_id: 0,
-                    #                 start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1!A5:B == sheet_id: 0,
-                    #                  start_row_index: 4,
-                    #                  start_column_index: 0, end_column_index: 2`
-                    #
-                    #   `Sheet1 == sheet_id:0`
-                    #
-                    # The start index must always be less than or equal to the end index.
-                    # If the start index equals the end index, then the range is empty.
-                    # Empty ranges are typically not meaningful and are usually rendered in the
-                    # UI as `#REF!`.
-                  "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                  "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                  "sheetId": 42, # The sheet this range is on.
-                  "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                },
-              ],
-              "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
-                  # protected area.
-                  # This field is read-only.
-              "description": "A String", # The description of this protected range.
-              "namedRangeId": "A String", # The named range this protected range is backed by, if any.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-              "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
-                  # This field is only visible to users with edit access to the protected
-                  # range and the document.
-                  # Editors are not supported with warning_only protection.
-                "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
-                    # range.  Domain protection is only supported on documents within a domain.
-                "users": [ # The email addresses of users with edit access to the protected range.
-                  "A String",
-                ],
-                "groups": [ # The email addresses of groups with edit access to the protected range.
-                  "A String",
                 ],
               },
-              "protectedRangeId": 42, # The ID of the protected range.
-                  # This field is read-only.
-              "warningOnly": True or False, # True if this protected range will show a warning when editing.
-                  # Warning-based protection means that every user can edit data in the
-                  # protected range, except editing will prompt a warning asking the user
-                  # to confirm the edit.
-                  #
-                  # When writing: if this field is true, then editors is ignored.
-                  # Additionally, if this field is changed from true to false and the
-                  # `editors` field is not set (nor included in the field mask), then
-                  # the editors will be set to all the editors in the document.
-              "range": { # A range on a sheet. # The range that is being protected.
-                  # The range may be fully unbounded, in which case this is considered
-                  # a protected sheet.
-                  #
-                  # When writing, only one of range or named_range_id
-                  # may be set.
-                  # All indexes are zero-based.
-                  # Indexes are half open, e.g the start index is inclusive
-                  # and the end index is exclusive -- [start_index, end_index).
-                  # Missing indexes indicate the range is unbounded on that side.
-                  #
-                  # For example, if `"Sheet1"` is sheet ID 0, then:
-                  #
-                  #   `Sheet1!A1:A1 == sheet_id: 0,
-                  #                   start_row_index: 0, end_row_index: 1,
-                  #                   start_column_index: 0, end_column_index: 1`
-                  #
-                  #   `Sheet1!A3:B4 == sheet_id: 0,
-                  #                   start_row_index: 2, end_row_index: 4,
-                  #                   start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A:B == sheet_id: 0,
-                  #                 start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1!A5:B == sheet_id: 0,
-                  #                  start_row_index: 4,
-                  #                  start_column_index: 0, end_column_index: 2`
-                  #
-                  #   `Sheet1 == sheet_id:0`
-                  #
-                  # The start index must always be less than or equal to the end index.
-                  # If the start index equals the end index, then the range is empty.
-                  # Empty ranges are typically not meaningful and are usually rendered in the
-                  # UI as `#REF!`.
-                "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                "sheetId": 42, # The sheet this range is on.
-                "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-              },
-            },
-          ],
-          "data": [ # Data in the grid, if this is a grid sheet.
-              # The number of GridData objects returned is dependent on the number of
-              # ranges requested on this sheet. For example, if this is representing
-              # `Sheet1`, and the spreadsheet was requested with ranges
-              # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
-              # startRow/startColumn of `0`,
-              # while the second one will have `startRow 14` (zero-based row 15),
-              # and `startColumn 3` (zero-based column D).
-            { # Data in the grid, as well as metadata about the dimensions.
-              "startRow": 42, # The first row this GridData refers to, zero-based.
-              "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
-                  # in start_row.
-                { # Properties about a dimension.
-                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
-                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
-                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
-                      # This field is read-only.
-                },
-              ],
-              "startColumn": 42, # The first column this GridData refers to, zero-based.
-              "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
-                  # in start_column.
-                { # Properties about a dimension.
-                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
-                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
-                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
-                      # This field is read-only.
-                },
-              ],
-              "rowData": [ # The data in the grid, one entry per row,
-                  # starting with the row in startRow.
-                  # The values in RowData will correspond to columns starting
-                  # at start_column.
-                { # Data about each cell in a row.
-                  "values": [ # The values in the row, one per column.
-                    { # Data about a specific cell.
-                      "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
-                          # is computed dynamically based on its data, grouping, filters, values,
-                          # etc. Only the top-left cell of the pivot table contains the pivot table
-                          # definition. The other cells will contain the calculated values of the
-                          # results of the pivot in their effective_value fields.
-                        "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
-                            # or vertically (as rows).
-                        "rows": [ # Each row grouping in the pivot table.
-                          { # A single grouping (either row or column) in a pivot table.
-                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
-                            "valueMetadata": [ # Metadata about values in the grouping.
-                              { # Metadata about a value in a pivot grouping.
-                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
-                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
-                                    # (Note that formulaValue is not valid,
-                                    #  because the values will be calculated.)
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              },
-                            ],
-                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
-                                # If not specified, sorting is alphabetical by this group's values.
-                              "buckets": [ # Determines the bucket from which values are chosen to sort.
-                                  #
-                                  # For example, in a pivot table with one row group & two column groups,
-                                  # the row group can list up to two values. The first value corresponds
-                                  # to a value within the first column group, and the second value
-                                  # corresponds to a value in the second column group.  If no values
-                                  # are listed, this would indicate that the row should be sorted according
-                                  # to the "Grand Total" over the column groups. If a single value is listed,
-                                  # this would correspond to using the "Total" of that bucket.
-                                { # The kinds of value that a cell in a spreadsheet can have.
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              ],
-                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
-                                  # grouping should be sorted by.
-                            },
-                            "sortOrder": "A String", # The order the values in this group should be sorted.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this group refers to column `C`, whereas the offset `1` would refer
-                                # to column `D`.
-                          },
-                        ],
-                        "source": { # A range on a sheet. # The range the pivot table is reading data from.
-                            # All indexes are zero-based.
-                            # Indexes are half open, e.g the start index is inclusive
-                            # and the end index is exclusive -- [start_index, end_index).
-                            # Missing indexes indicate the range is unbounded on that side.
-                            #
-                            # For example, if `"Sheet1"` is sheet ID 0, then:
-                            #
-                            #   `Sheet1!A1:A1 == sheet_id: 0,
-                            #                   start_row_index: 0, end_row_index: 1,
-                            #                   start_column_index: 0, end_column_index: 1`
-                            #
-                            #   `Sheet1!A3:B4 == sheet_id: 0,
-                            #                   start_row_index: 2, end_row_index: 4,
-                            #                   start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A:B == sheet_id: 0,
-                            #                 start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1!A5:B == sheet_id: 0,
-                            #                  start_row_index: 4,
-                            #                  start_column_index: 0, end_column_index: 2`
-                            #
-                            #   `Sheet1 == sheet_id:0`
-                            #
-                            # The start index must always be less than or equal to the end index.
-                            # If the start index equals the end index, then the range is empty.
-                            # Empty ranges are typically not meaningful and are usually rendered in the
-                            # UI as `#REF!`.
-                          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
-                          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
-                          "sheetId": 42, # The sheet this range is on.
-                          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
-                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
-                        },
-                        "values": [ # A list of values to include in the pivot table.
-                          { # The definition of how a value in a pivot table should be calculated.
-                            "formula": "A String", # A custom formula to calculate the value.  The formula must start
-                                # with an `=` character.
-                            "summarizeFunction": "A String", # A function to summarize the value.
-                                # If formula is set, the only supported values are
-                                # SUM and
-                                # CUSTOM.
-                                # If sourceColumnOffset is set, then `CUSTOM`
-                                # is not supported.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this value refers to column `C`, whereas the offset `1` would
-                                # refer to column `D`.
-                            "name": "A String", # A name to use for the value. This is only used if formula was set.
-                                # Otherwise, the column name is used.
-                          },
-                        ],
-                        "criteria": { # An optional mapping of filters per source column offset.
-                            #
-                            # The filters will be applied before aggregating data into the pivot table.
-                            # The map's key is the column offset of the source range that you want to
-                            # filter, and the value is the criteria for that column.
-                            #
-                            # For example, if the source was `C10:E15`, a key of `0` will have the filter
-                            # for column `C`, whereas the key `1` is for column `D`.
-                          "a_key": { # Criteria for showing/hiding rows in a pivot table.
-                            "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
-                              "A String",
-                            ],
-                          },
-                        },
-                        "columns": [ # Each column grouping in the pivot table.
-                          { # A single grouping (either row or column) in a pivot table.
-                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
-                            "valueMetadata": [ # Metadata about values in the grouping.
-                              { # Metadata about a value in a pivot grouping.
-                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
-                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
-                                    # (Note that formulaValue is not valid,
-                                    #  because the values will be calculated.)
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              },
-                            ],
-                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
-                                # If not specified, sorting is alphabetical by this group's values.
-                              "buckets": [ # Determines the bucket from which values are chosen to sort.
-                                  #
-                                  # For example, in a pivot table with one row group & two column groups,
-                                  # the row group can list up to two values. The first value corresponds
-                                  # to a value within the first column group, and the second value
-                                  # corresponds to a value in the second column group.  If no values
-                                  # are listed, this would indicate that the row should be sorted according
-                                  # to the "Grand Total" over the column groups. If a single value is listed,
-                                  # this would correspond to using the "Total" of that bucket.
-                                { # The kinds of value that a cell in a spreadsheet can have.
-                                  "numberValue": 3.14, # Represents a double value.
-                                      # Note: Dates, Times and DateTimes are represented as doubles in
-                                      # "serial number" format.
-                                  "boolValue": True or False, # Represents a boolean value.
-                                  "formulaValue": "A String", # Represents a formula.
-                                  "stringValue": "A String", # Represents a string value.
-                                      # Leading single quotes are not included. For example, if the user typed
-                                      # `'123` into the UI, this would be represented as a `stringValue` of
-                                      # `"123"`.
-                                  "errorValue": { # An error in a cell. # Represents an error.
-                                      # This field is read-only.
-                                    "message": "A String", # A message with more information about the error
-                                        # (in the spreadsheet's locale).
-                                    "type": "A String", # The type of error.
-                                  },
-                                },
-                              ],
-                              "valuesIndex": 42, # The offset in the PivotTable.values list which the values in this
-                                  # grouping should be sorted by.
-                            },
-                            "sortOrder": "A String", # The order the values in this group should be sorted.
-                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
-                                #
-                                # For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`
-                                # means this group refers to column `C`, whereas the offset `1` would refer
-                                # to column `D`.
-                          },
-                        ],
-                      },
-                      "hyperlink": "A String", # A hyperlink this cell points to, if any.
-                          # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
-                      "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
-                          # the calculated value.  For cells with literals, this will be
-                          # the same as the user_entered_value.
-                          # This field is read-only.
-                        "numberValue": 3.14, # Represents a double value.
-                            # Note: Dates, Times and DateTimes are represented as doubles in
-                            # "serial number" format.
-                        "boolValue": True or False, # Represents a boolean value.
-                        "formulaValue": "A String", # Represents a formula.
-                        "stringValue": "A String", # Represents a string value.
-                            # Leading single quotes are not included. For example, if the user typed
-                            # `'123` into the UI, this would be represented as a `stringValue` of
-                            # `"123"`.
-                        "errorValue": { # An error in a cell. # Represents an error.
-                            # This field is read-only.
-                          "message": "A String", # A message with more information about the error
-                              # (in the spreadsheet's locale).
-                          "type": "A String", # The type of error.
-                        },
-                      },
-                      "formattedValue": "A String", # The formatted value of the cell.
-                          # This is the value as it's shown to the user.
-                          # This field is read-only.
-                      "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
-                          # Note: Dates, Times and DateTimes are represented as doubles in
-                          # serial number format.
-                        "numberValue": 3.14, # Represents a double value.
-                            # Note: Dates, Times and DateTimes are represented as doubles in
-                            # "serial number" format.
-                        "boolValue": True or False, # Represents a boolean value.
-                        "formulaValue": "A String", # Represents a formula.
-                        "stringValue": "A String", # Represents a string value.
-                            # Leading single quotes are not included. For example, if the user typed
-                            # `'123` into the UI, this would be represented as a `stringValue` of
-                            # `"123"`.
-                        "errorValue": { # An error in a cell. # Represents an error.
-                            # This field is read-only.
-                          "message": "A String", # A message with more information about the error
-                              # (in the spreadsheet's locale).
-                          "type": "A String", # The type of error.
-                        },
-                      },
-                      "note": "A String", # Any note on the cell.
-                      "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
-                          # This includes the results of applying any conditional formatting and,
-                          # if the cell contains a formula, the computed number format.
-                          # If the effective format is the default format, effective format will
-                          # not be written.
-                          # This field is read-only.
-                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                              # the user's locale will be used if necessary for the given type.
-                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                              # information about the supported patterns.
-                          "type": "A String", # The type of the number format.
-                              # When writing, this field must be set.
-                        },
-                        "textDirection": "A String", # The direction of the text in the cell.
-                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                            # When updating padding, every field must be specified.
-                          "top": 42, # The top padding of the cell.
-                          "right": 42, # The right padding of the cell.
-                          "bottom": 42, # The bottom padding of the cell.
-                          "left": 42, # The left padding of the cell.
-                        },
-                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-                            # for simplicity of conversion to/from color representations in various
-                            # languages over compactness; for example, the fields of this representation
-                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                            # method in iOS; and, with just a little work, it can be easily formatted into
-                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                            #
-                            # Example (Java):
-                            #
-                            #      import com.google.type.Color;
-                            #
-                            #      // ...
-                            #      public static java.awt.Color fromProto(Color protocolor) {
-                            #        float alpha = protocolor.hasAlpha()
-                            #            ? protocolor.getAlpha().getValue()
-                            #            : 1.0;
-                            #
-                            #        return new java.awt.Color(
-                            #            protocolor.getRed(),
-                            #            protocolor.getGreen(),
-                            #            protocolor.getBlue(),
-                            #            alpha);
-                            #      }
-                            #
-                            #      public static Color toProto(java.awt.Color color) {
-                            #        float red = (float) color.getRed();
-                            #        float green = (float) color.getGreen();
-                            #        float blue = (float) color.getBlue();
-                            #        float denominator = 255.0;
-                            #        Color.Builder resultBuilder =
-                            #            Color
-                            #                .newBuilder()
-                            #                .setRed(red / denominator)
-                            #                .setGreen(green / denominator)
-                            #                .setBlue(blue / denominator);
-                            #        int alpha = color.getAlpha();
-                            #        if (alpha != 255) {
-                            #          result.setAlpha(
-                            #              FloatValue
-                            #                  .newBuilder()
-                            #                  .setValue(((float) alpha) / denominator)
-                            #                  .build());
-                            #        }
-                            #        return resultBuilder.build();
-                            #      }
-                            #      // ...
-                            #
-                            # Example (iOS / Obj-C):
-                            #
-                            #      // ...
-                            #      static UIColor* fromProto(Color* protocolor) {
-                            #         float red = [protocolor red];
-                            #         float green = [protocolor green];
-                            #         float blue = [protocolor blue];
-                            #         FloatValue* alpha_wrapper = [protocolor alpha];
-                            #         float alpha = 1.0;
-                            #         if (alpha_wrapper != nil) {
-                            #           alpha = [alpha_wrapper value];
-                            #         }
-                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                            #      }
-                            #
-                            #      static Color* toProto(UIColor* color) {
-                            #          CGFloat red, green, blue, alpha;
-                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                            #            return nil;
-                            #          }
-                            #          Color* result = [Color alloc] init];
-                            #          [result setRed:red];
-                            #          [result setGreen:green];
-                            #          [result setBlue:blue];
-                            #          if (alpha <= 0.9999) {
-                            #            [result setAlpha:floatWrapperWithValue(alpha)];
-                            #          }
-                            #          [result autorelease];
-                            #          return result;
-                            #     }
-                            #     // ...
-                            #
-                            #  Example (JavaScript):
-                            #
-                            #     // ...
-                            #
-                            #     var protoToCssColor = function(rgb_color) {
-                            #        var redFrac = rgb_color.red || 0.0;
-                            #        var greenFrac = rgb_color.green || 0.0;
-                            #        var blueFrac = rgb_color.blue || 0.0;
-                            #        var red = Math.floor(redFrac * 255);
-                            #        var green = Math.floor(greenFrac * 255);
-                            #        var blue = Math.floor(blueFrac * 255);
-                            #
-                            #        if (!('alpha' in rgb_color)) {
-                            #           return rgbToCssColor_(red, green, blue);
-                            #        }
-                            #
-                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                            #        var rgbParams = [red, green, blue].join(',');
-                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                            #     };
-                            #
-                            #     var rgbToCssColor_ = function(red, green, blue) {
-                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                            #       var hexString = rgbNumber.toString(16);
-                            #       var missingZeros = 6 - hexString.length;
-                            #       var resultBuilder = ['#'];
-                            #       for (var i = 0; i < missingZeros; i++) {
-                            #          resultBuilder.push('0');
-                            #       }
-                            #       resultBuilder.push(hexString);
-                            #       return resultBuilder.join('');
-                            #     };
-                            #
-                            #     // ...
-                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                              # the final pixel color is defined by the equation:
-                              #
-                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                              #
-                              # This means that a value of 1.0 corresponds to a solid color, whereas
-                              # a value of 0.0 corresponds to a completely transparent color. This
-                              # uses a wrapper message rather than a simple float scalar so that it is
-                              # possible to distinguish between a default value and the value being unset.
-                              # If omitted, this color object is to be rendered as a solid color
-                              # (as if the alpha value had been explicitly given with a value of 1.0).
-                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                        },
-                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                            # Absent values indicate that the field isn't specified.
-                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                              # for simplicity of conversion to/from color representations in various
-                              # languages over compactness; for example, the fields of this representation
-                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                              # method in iOS; and, with just a little work, it can be easily formatted into
-                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                              #
-                              # Example (Java):
-                              #
-                              #      import com.google.type.Color;
-                              #
-                              #      // ...
-                              #      public static java.awt.Color fromProto(Color protocolor) {
-                              #        float alpha = protocolor.hasAlpha()
-                              #            ? protocolor.getAlpha().getValue()
-                              #            : 1.0;
-                              #
-                              #        return new java.awt.Color(
-                              #            protocolor.getRed(),
-                              #            protocolor.getGreen(),
-                              #            protocolor.getBlue(),
-                              #            alpha);
-                              #      }
-                              #
-                              #      public static Color toProto(java.awt.Color color) {
-                              #        float red = (float) color.getRed();
-                              #        float green = (float) color.getGreen();
-                              #        float blue = (float) color.getBlue();
-                              #        float denominator = 255.0;
-                              #        Color.Builder resultBuilder =
-                              #            Color
-                              #                .newBuilder()
-                              #                .setRed(red / denominator)
-                              #                .setGreen(green / denominator)
-                              #                .setBlue(blue / denominator);
-                              #        int alpha = color.getAlpha();
-                              #        if (alpha != 255) {
-                              #          result.setAlpha(
-                              #              FloatValue
-                              #                  .newBuilder()
-                              #                  .setValue(((float) alpha) / denominator)
-                              #                  .build());
-                              #        }
-                              #        return resultBuilder.build();
-                              #      }
-                              #      // ...
-                              #
-                              # Example (iOS / Obj-C):
-                              #
-                              #      // ...
-                              #      static UIColor* fromProto(Color* protocolor) {
-                              #         float red = [protocolor red];
-                              #         float green = [protocolor green];
-                              #         float blue = [protocolor blue];
-                              #         FloatValue* alpha_wrapper = [protocolor alpha];
-                              #         float alpha = 1.0;
-                              #         if (alpha_wrapper != nil) {
-                              #           alpha = [alpha_wrapper value];
-                              #         }
-                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                              #      }
-                              #
-                              #      static Color* toProto(UIColor* color) {
-                              #          CGFloat red, green, blue, alpha;
-                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                              #            return nil;
-                              #          }
-                              #          Color* result = [Color alloc] init];
-                              #          [result setRed:red];
-                              #          [result setGreen:green];
-                              #          [result setBlue:blue];
-                              #          if (alpha <= 0.9999) {
-                              #            [result setAlpha:floatWrapperWithValue(alpha)];
-                              #          }
-                              #          [result autorelease];
-                              #          return result;
-                              #     }
-                              #     // ...
-                              #
-                              #  Example (JavaScript):
-                              #
-                              #     // ...
-                              #
-                              #     var protoToCssColor = function(rgb_color) {
-                              #        var redFrac = rgb_color.red || 0.0;
-                              #        var greenFrac = rgb_color.green || 0.0;
-                              #        var blueFrac = rgb_color.blue || 0.0;
-                              #        var red = Math.floor(redFrac * 255);
-                              #        var green = Math.floor(greenFrac * 255);
-                              #        var blue = Math.floor(blueFrac * 255);
-                              #
-                              #        if (!('alpha' in rgb_color)) {
-                              #           return rgbToCssColor_(red, green, blue);
-                              #        }
-                              #
-                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                              #        var rgbParams = [red, green, blue].join(',');
-                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                              #     };
-                              #
-                              #     var rgbToCssColor_ = function(red, green, blue) {
-                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                              #       var hexString = rgbNumber.toString(16);
-                              #       var missingZeros = 6 - hexString.length;
-                              #       var resultBuilder = ['#'];
-                              #       for (var i = 0; i < missingZeros; i++) {
-                              #          resultBuilder.push('0');
-                              #       }
-                              #       resultBuilder.push(hexString);
-                              #       return resultBuilder.join('');
-                              #     };
-                              #
-                              #     // ...
-                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                # the final pixel color is defined by the equation:
-                                #
-                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                #
-                                # This means that a value of 1.0 corresponds to a solid color, whereas
-                                # a value of 0.0 corresponds to a completely transparent color. This
-                                # uses a wrapper message rather than a simple float scalar so that it is
-                                # possible to distinguish between a default value and the value being unset.
-                                # If omitted, this color object is to be rendered as a solid color
-                                # (as if the alpha value had been explicitly given with a value of 1.0).
-                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                          },
-                          "bold": True or False, # True if the text is bold.
-                          "strikethrough": True or False, # True if the text has a strikethrough.
-                          "fontFamily": "A String", # The font family.
-                          "fontSize": 42, # The size of the font.
-                          "italic": True or False, # True if the text is italicized.
-                          "underline": True or False, # True if the text is underlined.
-                        },
-                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                        "borders": { # The borders of the cell. # The borders of the cell.
-                          "top": { # A border along a cell. # The top border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "right": { # A border along a cell. # The right border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "bottom": { # A border along a cell. # The bottom border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "left": { # A border along a cell. # The left border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                        },
-                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-                      },
-                      "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
-                          #
-                          # When writing, the new format will be merged with the existing format.
-                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
-                          "pattern": "A String", # Pattern string used for formatting.  If not set, a default pattern based on
-                              # the user's locale will be used if necessary for the given type.
-                              # See the [Date and Number Formats guide](/sheets/guides/formats) for more
-                              # information about the supported patterns.
-                          "type": "A String", # The type of the number format.
-                              # When writing, this field must be set.
-                        },
-                        "textDirection": "A String", # The direction of the text in the cell.
-                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
-                            # When updating padding, every field must be specified.
-                          "top": 42, # The top padding of the cell.
-                          "right": 42, # The right padding of the cell.
-                          "bottom": 42, # The bottom padding of the cell.
-                          "left": 42, # The left padding of the cell.
-                        },
-                        "horizontalAlignment": "A String", # The horizontal alignment of the value in the cell.
-                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
-                            # for simplicity of conversion to/from color representations in various
-                            # languages over compactness; for example, the fields of this representation
-                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                            # method in iOS; and, with just a little work, it can be easily formatted into
-                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                            #
-                            # Example (Java):
-                            #
-                            #      import com.google.type.Color;
-                            #
-                            #      // ...
-                            #      public static java.awt.Color fromProto(Color protocolor) {
-                            #        float alpha = protocolor.hasAlpha()
-                            #            ? protocolor.getAlpha().getValue()
-                            #            : 1.0;
-                            #
-                            #        return new java.awt.Color(
-                            #            protocolor.getRed(),
-                            #            protocolor.getGreen(),
-                            #            protocolor.getBlue(),
-                            #            alpha);
-                            #      }
-                            #
-                            #      public static Color toProto(java.awt.Color color) {
-                            #        float red = (float) color.getRed();
-                            #        float green = (float) color.getGreen();
-                            #        float blue = (float) color.getBlue();
-                            #        float denominator = 255.0;
-                            #        Color.Builder resultBuilder =
-                            #            Color
-                            #                .newBuilder()
-                            #                .setRed(red / denominator)
-                            #                .setGreen(green / denominator)
-                            #                .setBlue(blue / denominator);
-                            #        int alpha = color.getAlpha();
-                            #        if (alpha != 255) {
-                            #          result.setAlpha(
-                            #              FloatValue
-                            #                  .newBuilder()
-                            #                  .setValue(((float) alpha) / denominator)
-                            #                  .build());
-                            #        }
-                            #        return resultBuilder.build();
-                            #      }
-                            #      // ...
-                            #
-                            # Example (iOS / Obj-C):
-                            #
-                            #      // ...
-                            #      static UIColor* fromProto(Color* protocolor) {
-                            #         float red = [protocolor red];
-                            #         float green = [protocolor green];
-                            #         float blue = [protocolor blue];
-                            #         FloatValue* alpha_wrapper = [protocolor alpha];
-                            #         float alpha = 1.0;
-                            #         if (alpha_wrapper != nil) {
-                            #           alpha = [alpha_wrapper value];
-                            #         }
-                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                            #      }
-                            #
-                            #      static Color* toProto(UIColor* color) {
-                            #          CGFloat red, green, blue, alpha;
-                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                            #            return nil;
-                            #          }
-                            #          Color* result = [Color alloc] init];
-                            #          [result setRed:red];
-                            #          [result setGreen:green];
-                            #          [result setBlue:blue];
-                            #          if (alpha <= 0.9999) {
-                            #            [result setAlpha:floatWrapperWithValue(alpha)];
-                            #          }
-                            #          [result autorelease];
-                            #          return result;
-                            #     }
-                            #     // ...
-                            #
-                            #  Example (JavaScript):
-                            #
-                            #     // ...
-                            #
-                            #     var protoToCssColor = function(rgb_color) {
-                            #        var redFrac = rgb_color.red || 0.0;
-                            #        var greenFrac = rgb_color.green || 0.0;
-                            #        var blueFrac = rgb_color.blue || 0.0;
-                            #        var red = Math.floor(redFrac * 255);
-                            #        var green = Math.floor(greenFrac * 255);
-                            #        var blue = Math.floor(blueFrac * 255);
-                            #
-                            #        if (!('alpha' in rgb_color)) {
-                            #           return rgbToCssColor_(red, green, blue);
-                            #        }
-                            #
-                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                            #        var rgbParams = [red, green, blue].join(',');
-                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                            #     };
-                            #
-                            #     var rgbToCssColor_ = function(red, green, blue) {
-                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                            #       var hexString = rgbNumber.toString(16);
-                            #       var missingZeros = 6 - hexString.length;
-                            #       var resultBuilder = ['#'];
-                            #       for (var i = 0; i < missingZeros; i++) {
-                            #          resultBuilder.push('0');
-                            #       }
-                            #       resultBuilder.push(hexString);
-                            #       return resultBuilder.join('');
-                            #     };
-                            #
-                            #     // ...
-                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                              # the final pixel color is defined by the equation:
-                              #
-                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                              #
-                              # This means that a value of 1.0 corresponds to a solid color, whereas
-                              # a value of 0.0 corresponds to a completely transparent color. This
-                              # uses a wrapper message rather than a simple float scalar so that it is
-                              # possible to distinguish between a default value and the value being unset.
-                              # If omitted, this color object is to be rendered as a solid color
-                              # (as if the alpha value had been explicitly given with a value of 1.0).
-                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                        },
-                        "verticalAlignment": "A String", # The vertical alignment of the value in the cell.
-                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
-                            # Absent values indicate that the field isn't specified.
-                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                              # for simplicity of conversion to/from color representations in various
-                              # languages over compactness; for example, the fields of this representation
-                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                              # method in iOS; and, with just a little work, it can be easily formatted into
-                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                              #
-                              # Example (Java):
-                              #
-                              #      import com.google.type.Color;
-                              #
-                              #      // ...
-                              #      public static java.awt.Color fromProto(Color protocolor) {
-                              #        float alpha = protocolor.hasAlpha()
-                              #            ? protocolor.getAlpha().getValue()
-                              #            : 1.0;
-                              #
-                              #        return new java.awt.Color(
-                              #            protocolor.getRed(),
-                              #            protocolor.getGreen(),
-                              #            protocolor.getBlue(),
-                              #            alpha);
-                              #      }
-                              #
-                              #      public static Color toProto(java.awt.Color color) {
-                              #        float red = (float) color.getRed();
-                              #        float green = (float) color.getGreen();
-                              #        float blue = (float) color.getBlue();
-                              #        float denominator = 255.0;
-                              #        Color.Builder resultBuilder =
-                              #            Color
-                              #                .newBuilder()
-                              #                .setRed(red / denominator)
-                              #                .setGreen(green / denominator)
-                              #                .setBlue(blue / denominator);
-                              #        int alpha = color.getAlpha();
-                              #        if (alpha != 255) {
-                              #          result.setAlpha(
-                              #              FloatValue
-                              #                  .newBuilder()
-                              #                  .setValue(((float) alpha) / denominator)
-                              #                  .build());
-                              #        }
-                              #        return resultBuilder.build();
-                              #      }
-                              #      // ...
-                              #
-                              # Example (iOS / Obj-C):
-                              #
-                              #      // ...
-                              #      static UIColor* fromProto(Color* protocolor) {
-                              #         float red = [protocolor red];
-                              #         float green = [protocolor green];
-                              #         float blue = [protocolor blue];
-                              #         FloatValue* alpha_wrapper = [protocolor alpha];
-                              #         float alpha = 1.0;
-                              #         if (alpha_wrapper != nil) {
-                              #           alpha = [alpha_wrapper value];
-                              #         }
-                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                              #      }
-                              #
-                              #      static Color* toProto(UIColor* color) {
-                              #          CGFloat red, green, blue, alpha;
-                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                              #            return nil;
-                              #          }
-                              #          Color* result = [Color alloc] init];
-                              #          [result setRed:red];
-                              #          [result setGreen:green];
-                              #          [result setBlue:blue];
-                              #          if (alpha <= 0.9999) {
-                              #            [result setAlpha:floatWrapperWithValue(alpha)];
-                              #          }
-                              #          [result autorelease];
-                              #          return result;
-                              #     }
-                              #     // ...
-                              #
-                              #  Example (JavaScript):
-                              #
-                              #     // ...
-                              #
-                              #     var protoToCssColor = function(rgb_color) {
-                              #        var redFrac = rgb_color.red || 0.0;
-                              #        var greenFrac = rgb_color.green || 0.0;
-                              #        var blueFrac = rgb_color.blue || 0.0;
-                              #        var red = Math.floor(redFrac * 255);
-                              #        var green = Math.floor(greenFrac * 255);
-                              #        var blue = Math.floor(blueFrac * 255);
-                              #
-                              #        if (!('alpha' in rgb_color)) {
-                              #           return rgbToCssColor_(red, green, blue);
-                              #        }
-                              #
-                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                              #        var rgbParams = [red, green, blue].join(',');
-                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                              #     };
-                              #
-                              #     var rgbToCssColor_ = function(red, green, blue) {
-                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                              #       var hexString = rgbNumber.toString(16);
-                              #       var missingZeros = 6 - hexString.length;
-                              #       var resultBuilder = ['#'];
-                              #       for (var i = 0; i < missingZeros; i++) {
-                              #          resultBuilder.push('0');
-                              #       }
-                              #       resultBuilder.push(hexString);
-                              #       return resultBuilder.join('');
-                              #     };
-                              #
-                              #     // ...
-                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                # the final pixel color is defined by the equation:
-                                #
-                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                #
-                                # This means that a value of 1.0 corresponds to a solid color, whereas
-                                # a value of 0.0 corresponds to a completely transparent color. This
-                                # uses a wrapper message rather than a simple float scalar so that it is
-                                # possible to distinguish between a default value and the value being unset.
-                                # If omitted, this color object is to be rendered as a solid color
-                                # (as if the alpha value had been explicitly given with a value of 1.0).
-                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                          },
-                          "bold": True or False, # True if the text is bold.
-                          "strikethrough": True or False, # True if the text has a strikethrough.
-                          "fontFamily": "A String", # The font family.
-                          "fontSize": 42, # The size of the font.
-                          "italic": True or False, # True if the text is italicized.
-                          "underline": True or False, # True if the text is underlined.
-                        },
-                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
-                        "borders": { # The borders of the cell. # The borders of the cell.
-                          "top": { # A border along a cell. # The top border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "right": { # A border along a cell. # The right border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "bottom": { # A border along a cell. # The bottom border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                          "left": { # A border along a cell. # The left border of the cell.
-                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "width": 42, # The width of the border, in pixels.
-                                # Deprecated; the width is determined by the "style" field.
-                            "style": "A String", # The style of the border.
-                          },
-                        },
-                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
-                      },
-                      "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
-                          #
-                          # When writing, the new data validation rule will overwrite any prior rule.
-                        "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
-                            # If true, "List" conditions will show a dropdown.
-                        "strict": True or False, # True if invalid data should be rejected.
-                        "inputMessage": "A String", # A message to show the user when adding data to the cell.
-                        "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
-                            # BooleanConditions are used by conditional formatting,
-                            # data validation, and the criteria in filters.
-                          "type": "A String", # The type of condition.
-                          "values": [ # The values of the condition. The number of supported values depends
-                              # on the condition type.  Some support zero values,
-                              # others one or two values,
-                              # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
-                            { # The value of the condition.
-                              "relativeDate": "A String", # A relative date (based on the current date).
-                                  # Valid only if the type is
-                                  # DATE_BEFORE,
-                                  # DATE_AFTER,
-                                  # DATE_ON_OR_BEFORE or
-                                  # DATE_ON_OR_AFTER.
-                                  #
-                                  # Relative dates are not supported in data validation.
-                                  # They are supported only in conditional formatting and
-                                  # conditional filters.
-                              "userEnteredValue": "A String", # A value the condition is based on.
-                                  # The value will be parsed as if the user typed into a cell.
-                                  # Formulas are supported (and must begin with an `=`).
-                            },
-                          ],
-                        },
-                      },
-                      "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.  Runs are only valid
-                          # on user entered strings, not formulas, bools, or numbers.
-                          # Runs start at specific indexes in the text and continue until the next
-                          # run. Properties of a run will continue unless explicitly changed
-                          # in a subsequent run (and properties of the first run will continue
-                          # the properties of the cell unless explicitly changed).
-                          #
-                          # When writing, the new runs will overwrite any prior runs.  When writing a
-                          # new user_entered_value, previous runs will be erased.
-                        { # A run of a text format. The format of this run continues until the start
-                            # index of the next run.
-                            # When updating, all fields must be set.
-                          "startIndex": 42, # The character index where this run starts.
-                          "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
-                              # Absent values indicate that the field isn't specified.
-                            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
-                                # for simplicity of conversion to/from color representations in various
-                                # languages over compactness; for example, the fields of this representation
-                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                                # method in iOS; and, with just a little work, it can be easily formatted into
-                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                                #
-                                # Example (Java):
-                                #
-                                #      import com.google.type.Color;
-                                #
-                                #      // ...
-                                #      public static java.awt.Color fromProto(Color protocolor) {
-                                #        float alpha = protocolor.hasAlpha()
-                                #            ? protocolor.getAlpha().getValue()
-                                #            : 1.0;
-                                #
-                                #        return new java.awt.Color(
-                                #            protocolor.getRed(),
-                                #            protocolor.getGreen(),
-                                #            protocolor.getBlue(),
-                                #            alpha);
-                                #      }
-                                #
-                                #      public static Color toProto(java.awt.Color color) {
-                                #        float red = (float) color.getRed();
-                                #        float green = (float) color.getGreen();
-                                #        float blue = (float) color.getBlue();
-                                #        float denominator = 255.0;
-                                #        Color.Builder resultBuilder =
-                                #            Color
-                                #                .newBuilder()
-                                #                .setRed(red / denominator)
-                                #                .setGreen(green / denominator)
-                                #                .setBlue(blue / denominator);
-                                #        int alpha = color.getAlpha();
-                                #        if (alpha != 255) {
-                                #          result.setAlpha(
-                                #              FloatValue
-                                #                  .newBuilder()
-                                #                  .setValue(((float) alpha) / denominator)
-                                #                  .build());
-                                #        }
-                                #        return resultBuilder.build();
-                                #      }
-                                #      // ...
-                                #
-                                # Example (iOS / Obj-C):
-                                #
-                                #      // ...
-                                #      static UIColor* fromProto(Color* protocolor) {
-                                #         float red = [protocolor red];
-                                #         float green = [protocolor green];
-                                #         float blue = [protocolor blue];
-                                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                                #         float alpha = 1.0;
-                                #         if (alpha_wrapper != nil) {
-                                #           alpha = [alpha_wrapper value];
-                                #         }
-                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                                #      }
-                                #
-                                #      static Color* toProto(UIColor* color) {
-                                #          CGFloat red, green, blue, alpha;
-                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                                #            return nil;
-                                #          }
-                                #          Color* result = [Color alloc] init];
-                                #          [result setRed:red];
-                                #          [result setGreen:green];
-                                #          [result setBlue:blue];
-                                #          if (alpha <= 0.9999) {
-                                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                                #          }
-                                #          [result autorelease];
-                                #          return result;
-                                #     }
-                                #     // ...
-                                #
-                                #  Example (JavaScript):
-                                #
-                                #     // ...
-                                #
-                                #     var protoToCssColor = function(rgb_color) {
-                                #        var redFrac = rgb_color.red || 0.0;
-                                #        var greenFrac = rgb_color.green || 0.0;
-                                #        var blueFrac = rgb_color.blue || 0.0;
-                                #        var red = Math.floor(redFrac * 255);
-                                #        var green = Math.floor(greenFrac * 255);
-                                #        var blue = Math.floor(blueFrac * 255);
-                                #
-                                #        if (!('alpha' in rgb_color)) {
-                                #           return rgbToCssColor_(red, green, blue);
-                                #        }
-                                #
-                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                                #        var rgbParams = [red, green, blue].join(',');
-                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                                #     };
-                                #
-                                #     var rgbToCssColor_ = function(red, green, blue) {
-                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                                #       var hexString = rgbNumber.toString(16);
-                                #       var missingZeros = 6 - hexString.length;
-                                #       var resultBuilder = ['#'];
-                                #       for (var i = 0; i < missingZeros; i++) {
-                                #          resultBuilder.push('0');
-                                #       }
-                                #       resultBuilder.push(hexString);
-                                #       return resultBuilder.join('');
-                                #     };
-                                #
-                                #     // ...
-                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                                  # the final pixel color is defined by the equation:
-                                  #
-                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                                  #
-                                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                                  # a value of 0.0 corresponds to a completely transparent color. This
-                                  # uses a wrapper message rather than a simple float scalar so that it is
-                                  # possible to distinguish between a default value and the value being unset.
-                                  # If omitted, this color object is to be rendered as a solid color
-                                  # (as if the alpha value had been explicitly given with a value of 1.0).
-                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-                            },
-                            "bold": True or False, # True if the text is bold.
-                            "strikethrough": True or False, # True if the text has a strikethrough.
-                            "fontFamily": "A String", # The font family.
-                            "fontSize": 42, # The size of the font.
-                            "italic": True or False, # True if the text is italicized.
-                            "underline": True or False, # True if the text is underlined.
-                          },
-                        },
-                      ],
-                    },
-                  ],
-                },
-              ],
-            },
-          ],
-          "properties": { # Properties of a sheet. # The properties of the sheet.
-            "sheetType": "A String", # The type of sheet. Defaults to GRID.
-                # This field cannot be changed once set.
-            "index": 42, # The index of the sheet within the spreadsheet.
-                # When adding or updating sheet properties, if this field
-                # is excluded then the sheet will be added or moved to the end
-                # of the sheet list.
-            "title": "A String", # The name of the sheet.
-            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
-                # (If the sheet is an object sheet, containing a chart or image, then
-                # this field will be absent.)
-                # When writing it is an error to set any grid properties on non-grid sheets.
-              "columnCount": 42, # The number of columns in the grid.
-              "rowCount": 42, # The number of rows in the grid.
-              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
-              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
-              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
-            },
-            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
-            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
-                # for simplicity of conversion to/from color representations in various
-                # languages over compactness; for example, the fields of this representation
-                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
-                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
-                # method in iOS; and, with just a little work, it can be easily formatted into
-                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
-                #
-                # Example (Java):
-                #
-                #      import com.google.type.Color;
-                #
-                #      // ...
-                #      public static java.awt.Color fromProto(Color protocolor) {
-                #        float alpha = protocolor.hasAlpha()
-                #            ? protocolor.getAlpha().getValue()
-                #            : 1.0;
-                #
-                #        return new java.awt.Color(
-                #            protocolor.getRed(),
-                #            protocolor.getGreen(),
-                #            protocolor.getBlue(),
-                #            alpha);
-                #      }
-                #
-                #      public static Color toProto(java.awt.Color color) {
-                #        float red = (float) color.getRed();
-                #        float green = (float) color.getGreen();
-                #        float blue = (float) color.getBlue();
-                #        float denominator = 255.0;
-                #        Color.Builder resultBuilder =
-                #            Color
-                #                .newBuilder()
-                #                .setRed(red / denominator)
-                #                .setGreen(green / denominator)
-                #                .setBlue(blue / denominator);
-                #        int alpha = color.getAlpha();
-                #        if (alpha != 255) {
-                #          result.setAlpha(
-                #              FloatValue
-                #                  .newBuilder()
-                #                  .setValue(((float) alpha) / denominator)
-                #                  .build());
-                #        }
-                #        return resultBuilder.build();
-                #      }
-                #      // ...
-                #
-                # Example (iOS / Obj-C):
-                #
-                #      // ...
-                #      static UIColor* fromProto(Color* protocolor) {
-                #         float red = [protocolor red];
-                #         float green = [protocolor green];
-                #         float blue = [protocolor blue];
-                #         FloatValue* alpha_wrapper = [protocolor alpha];
-                #         float alpha = 1.0;
-                #         if (alpha_wrapper != nil) {
-                #           alpha = [alpha_wrapper value];
-                #         }
-                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-                #      }
-                #
-                #      static Color* toProto(UIColor* color) {
-                #          CGFloat red, green, blue, alpha;
-                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-                #            return nil;
-                #          }
-                #          Color* result = [Color alloc] init];
-                #          [result setRed:red];
-                #          [result setGreen:green];
-                #          [result setBlue:blue];
-                #          if (alpha <= 0.9999) {
-                #            [result setAlpha:floatWrapperWithValue(alpha)];
-                #          }
-                #          [result autorelease];
-                #          return result;
-                #     }
-                #     // ...
-                #
-                #  Example (JavaScript):
-                #
-                #     // ...
-                #
-                #     var protoToCssColor = function(rgb_color) {
-                #        var redFrac = rgb_color.red || 0.0;
-                #        var greenFrac = rgb_color.green || 0.0;
-                #        var blueFrac = rgb_color.blue || 0.0;
-                #        var red = Math.floor(redFrac * 255);
-                #        var green = Math.floor(greenFrac * 255);
-                #        var blue = Math.floor(blueFrac * 255);
-                #
-                #        if (!('alpha' in rgb_color)) {
-                #           return rgbToCssColor_(red, green, blue);
-                #        }
-                #
-                #        var alphaFrac = rgb_color.alpha.value || 0.0;
-                #        var rgbParams = [red, green, blue].join(',');
-                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
-                #     };
-                #
-                #     var rgbToCssColor_ = function(red, green, blue) {
-                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
-                #       var hexString = rgbNumber.toString(16);
-                #       var missingZeros = 6 - hexString.length;
-                #       var resultBuilder = ['#'];
-                #       for (var i = 0; i < missingZeros; i++) {
-                #          resultBuilder.push('0');
-                #       }
-                #       resultBuilder.push(hexString);
-                #       return resultBuilder.join('');
-                #     };
-                #
-                #     // ...
-              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
-              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
-                  # the final pixel color is defined by the equation:
-                  #
-                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
-                  #
-                  # This means that a value of 1.0 corresponds to a solid color, whereas
-                  # a value of 0.0 corresponds to a completely transparent color. This
-                  # uses a wrapper message rather than a simple float scalar so that it is
-                  # possible to distinguish between a default value and the value being unset.
-                  # If omitted, this color object is to be rendered as a solid color
-                  # (as if the alpha value had been explicitly given with a value of 1.0).
-              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
-              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
-            },
-            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
-            "sheetId": 42, # The ID of the sheet. Must be non-negative.
-                # This field cannot be changed once set.
+            ],
           },
+        ],
+        "properties": { # Properties of a sheet. # The properties of the sheet.
+          "sheetType": "A String", # The type of sheet. Defaults to GRID.
+              # This field cannot be changed once set.
+          "index": 42, # The index of the sheet within the spreadsheet.
+              # When adding or updating sheet properties, if this field
+              # is excluded then the sheet will be added or moved to the end
+              # of the sheet list. When updating sheet indices or inserting
+              # sheets, movement is considered in "before the move" indexes.
+              # For example, if there were 3 sheets (S1, S2, S3) in order to
+              # move S1 ahead of S2 the index would have to be set to 2. A sheet
+              # index update request will be ignored if the requested index is
+              # identical to the sheets current index or if the requested new
+              # index is equal to the current sheet index + 1.
+          "title": "A String", # The name of the sheet.
+          "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+              # (If the sheet is an object sheet, containing a chart or image, then
+              # this field will be absent.)
+              # When writing it is an error to set any grid properties on non-grid sheets.
+            "columnCount": 42, # The number of columns in the grid.
+            "rowCount": 42, # The number of rows in the grid.
+            "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+            "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+            "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+          },
+          "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+          "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+          "sheetId": 42, # The ID of the sheet. Must be non-negative.
+              # This field cannot be changed once set.
         },
-      ],
-    }</pre>
+      },
+    ],
+    "spreadsheetUrl": "A String", # The url of the spreadsheet.
+        # This field is read-only.
+  }</pre>
 </div>
 
 </body></html>
\ No newline at end of file